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

$projectionと$elemMatch

    投影法の違いはやや微妙です。使用例では、これらは(インデックスの使用に関して)同等のクエリである必要がありますが、$elemMatch 例では、クエリ条件を不必要に繰り返しています。 $ この例では、射影がより賢明な選択です。

    ドキュメントに記載されている重要な違いは、配列です。フィールド制限 $の場合 予測:

    以下の射影演算子の違いに関するいくつかの追加の注意事項...

    位置($ )射影演算子

    • クエリ結果に含まれる配列フィールドの内容を、クエリドキュメントに一致する最初の要素を含むように制限します。

    • 一致する配列フィールドがクエリ条件に含まれている必要があります

    • クエリ条件に単一の配列フィールドが表示される場合にのみ使用できます

    • プロジェクションでは1回しか使用できません

    $elemMatch 射影演算子

    • クエリ結果に含まれる配列フィールドの内容を、$elemMatch条件に一致する最初の配列要素のみを含むように制限します

    • 一致する配列がクエリ条件に含まれている必要はありません

    • 埋め込まれたドキュメントである配列要素の複数の条件に一致させるために使用できます

    $elemMatch クエリ演算子

    $elemMatchもあることに注意してください 同様のマッチングを実行するクエリ演算子ですが、結果の射影ではなくクエリで実行されます。これが$と組み合わせて使用​​されるのを見るのは珍しいことではありません 投影。

    ドキュメントからの例 を借用 両方を使用できる場所:

    db.students.find(
        // use $elemMatch query operator to match multiple criteria in the grades array
        { grades: {
            $elemMatch: {
                mean:  { $gt: 70 },
                grade: { $gt: 90 }
            }
        }},
    
        // use $ projection to get the first matching item in the "grades" array
        { "grades.$": 1 }
    )
    


    1. 'ObjectId()'ラッパーを含めずにmongo ObjectId .toStringを変換する方法-値だけですか?

    2. MongoDBの単純なHTTP/TCPヘルスチェック

    3. Spark-on-HBase:DataFrameベースのHBaseコネクター

    4. マングースでバルクアップサートをしようとしています。これを行うための最もクリーンな方法は何ですか?