您只能使用聚合框架来做到这一点,而不能使用常规查找。
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 是“值”字符串的第一部分(不过,您不能比较比field1 的最短可能值更多的字符。
EDIT 从 3.6 版开始,您可以使用 $expr 表达式在 find 中执行此操作:
db.coll.find({$expr:{$eq:["value", {$concat:["$field1", "$field2"]}]}})