通常の検索ではなく、集計フレームワークでのみ実行できます。
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
の可能な最短値より多くの文字を比較してはなりません。
編集 バージョン3.6以降、$expr
を使用して検索でこれを行うことができます 式:
db.coll.find({$expr:{$eq:["value", {$concat:["$field1", "$field2"]}]}})