można tylko zrobić to z ram agregacji, nie z regularnym znalezieniem.
db.coll.aggregate({$project:{newField:{$concat:["$field1","$field2"]}}},
{$match:{newField:"value"}}
);
pamiętać, że nie będą mogli używać żadnych indeksów, ponieważ nie ma wsparcia dla indeksów obliczanych wartości w MongoDB (jeszcze).
Jeśli indeks na field1
i wiesz, ile znaków można oczekiwać pole1 przyczynić się do value
można zwiększyć wydajność tego agregacji jak ten:
db.coll.aggregate({$match:{field1:/^val/}},
{$project:{newField:{$concat:["$field1","$field2"]}}},
{$match:{newField:"value"}}
);
gdzie val
to pierwsza część „wartość” ciąg (nie należy porównać więcej znaków niż najkrótszej możliwej wartości field1
chociaż.
EDIT od wersji 3.6 można to zrobić w znalezisku pomocą $expr
Wyrażenie:
db.coll.find({$expr:{$eq:["value", {$concat:["$field1", "$field2"]}]}})
Awesome, to jest prawie to, czego potrzebuję: sprawdź mój zmienił, w jaki sposób można włączyć dopasowanie $ do "in (array)"? – Deleteman
nvm, znalazłem operatora $ in! – Deleteman
Łańcuch w agregacie mongodb jest tam, gdzie jest! – Rohmer