Możesz to zrobić tylko za pomocą frameworka agregacji, a nie zwykłego wyszukiwania.
db.coll.aggregate({$project:{newField:{$concat:["$field1","$field2"]}}},
{$match:{newField:"value"}}
);
Zwróć uwagę, że nie będzie można używać żadnych indeksów, ponieważ nie ma obsługi indeksów dla obliczonych wartości w MongoDB (jeszcze).
Jeśli masz indeks w field1
i wiesz, ile znaków spodziewasz się, że pole 1 wniesie wkład w value
możesz poprawić wydajność tej agregacji w ten sposób:
db.coll.aggregate({$match:{field1:/^val/}},
{$project:{newField:{$concat:["$field1","$field2"]}}},
{$match:{newField:"value"}}
);
gdzie val
jest pierwszą częścią ciągu „wartość” (nie wolno porównywać więcej znaków niż najkrótsza możliwa wartość field1
chociaż.
EDYTUJ od wersji 3.6 możesz to zrobić w find za pomocą $expr
wyrażenie:
db.coll.find({$expr:{$eq:["value", {$concat:["$field1", "$field2"]}]}})