Можете да го направите само с рамката за агрегиране, не и с редовното намиране.
db.coll.aggregate({$project:{newField:{$concat:["$field1","$field2"]}}},
{$match:{newField:"value"}}
);
Имайте предвид, че това няма да може да използва никакви индекси, тъй като няма поддръжка за индекси за изчислени стойности в MongoDB (все още).
Ако имате индекс на field1
и знаете колко знака очаквате поле1 да допринесе за value
можете да подобрите производителността на това агрегиране по следния начин:
db.coll.aggregate({$match:{field1:/^val/}},
{$project:{newField:{$concat:["$field1","$field2"]}}},
{$match:{newField:"value"}}
);
където val
е първата част от низа "стойност" (не трябва да сравнявате повече знаци от най-кратката възможна стойност на field1
все пак.
РЕДАКТИРАНЕ от версия 3.6 можете да направите това в find с помощта на $expr
израз:
db.coll.find({$expr:{$eq:["value", {$concat:["$field1", "$field2"]}]}})