有没有办法在 MongoDB 上做这样的事情?
select * from table where concat(field1, field2) = 'value'
为了澄清,我有一个全名数组,但文件的名字和姓氏是分开的,所以我想做这样的事情:
select * from table where concat(firstname, lastname) in ([ARRAY OF NAMES])
最佳答案
您只能使用聚合框架来做到这一点,而不能使用常规查找。
db.coll.aggregate({$project:{newField:{$concat:["$field1","$field2"]}}},
{$match:{newField:"value"}}
);
请注意,这将无法使用任何索引,因为 MongoDB 中不支持计算值的索引(目前)。
如果您在 field1
上有一个索引,并且知道您希望 field1 为 value
贡献多少字符,则可以像这样提高此聚合的性能:
db.coll.aggregate({$match:{field1:/^val/}},
{$project:{newField:{$concat:["$field1","$field2"]}}},
{$match:{newField:"value"}}
);
其中 val
是“value”字符串的第一部分(但您不能比较比 field1
的最短可能值更多的字符。
EDIT 从 3.6 版开始,您可以使用 $expr
表达式在 find 中执行此操作:
db.coll.find({$expr:{$eq:["value", {$concat:["$field1", "$field2"]}]}})
关于mongodb - 选择匹配mongodb中两个字段的concat值的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24662413/