有没有办法在MongoDB上做类似的事情?
select * from table where concat(field1, field2) = 'value'
为了澄清,我有一个全名数组,但是文件的名字和姓氏是分开的,所以我想做一些类似的事情:
select * from table where concat(firstname, lastname) in ([ARRAY OF NAMES])
有没有办法在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"]}]}})