sql >> データベース >  >> NoSQL >> MongoDB

mongodbの2つのフィールドの連結値に一致するレコードを選択します

    通常の検索ではなく、集計フレームワークでのみ実行できます。

    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"]}]}})
    


    1. 素晴らしいMongoDBGUIツールの定義を支援する

    2. CentOS7へのRedisのインストール

    3. MongoDBからのランダムレコード

    4. マングースの__vフィールドとは何ですか