Anda hanya dapat melakukannya dengan kerangka kerja agregasi, bukan dengan pencarian biasa.
db.coll.aggregate({$project:{newField:{$concat:["$field1","$field2"]}}},
{$match:{newField:"value"}}
);
Perhatikan bahwa ini tidak akan dapat menggunakan indeks apa pun, karena tidak ada dukungan untuk indeks pada nilai yang dihitung di MongoDB (belum).
Jika Anda memiliki indeks di field1
dan Anda tahu berapa banyak karakter yang Anda harapkan dari field1 untuk berkontribusi pada value
Anda dapat meningkatkan kinerja agregasi ini seperti ini:
db.coll.aggregate({$match:{field1:/^val/}},
{$project:{newField:{$concat:["$field1","$field2"]}}},
{$match:{newField:"value"}}
);
dimana val
adalah bagian pertama dari string "nilai" (Anda tidak boleh membandingkan lebih banyak karakter daripada nilai terpendek yang mungkin dari field1
sekalipun.
EDIT pada versi 3.6 Anda dapat melakukan ini di find menggunakan $expr
ekspresi:
db.coll.find({$expr:{$eq:["value", {$concat:["$field1", "$field2"]}]}})