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

MongoDBコレクションのオブジェクト配列内のクエリされた要素のみを取得します

    MongoDB2.2の新しい$elemMatch 射影演算子は、返されたドキュメントを変更して最初ののみを含むようにする別の方法を提供します 一致したshapes 要素:

    db.test.find(
        {"shapes.color": "red"}, 
        {_id: 0, shapes: {$elemMatch: {color: "red"}}});
    

    返品:

    {"shapes" : [{"shape": "circle", "color": "red"}]}
    

    2.2では、$ projection operatorを使用してこれを行うこともできます。 、ここで$ プロジェクションオブジェクトのフィールド名は、クエリからフィールドで最初に一致する配列要素のインデックスを表します。以下は、上記と同じ結果を返します。

    db.test.find({"shapes.color": "red"}, {_id: 0, 'shapes.$': 1});
    

    MongoDB3.2アップデート

    3.2リリース以降、新しい$filterを使用できます 射影中に配列をフィルタリングする集約演算子。これには、すべてを含めるという利点があります。 最初のものだけでなく、一致します。

    db.test.aggregate([
        // Get just the docs that contain a shapes element where color is 'red'
        {$match: {'shapes.color': 'red'}},
        {$project: {
            shapes: {$filter: {
                input: '$shapes',
                as: 'shape',
                cond: {$eq: ['$$shape.color', 'red']}
            }},
            _id: 0
        }}
    ])
    

    結果:

    [ 
        {
            "shapes" : [ 
                {
                    "shape" : "circle",
                    "color" : "red"
                }
            ]
        }
    ]
    


    1. MongoDBからDynamoDBへの移行、パート1

    2. Mongodbは、条件に一致するすべてのオブジェクトのすべての配列要素をカウントします

    3. Python-Redisサーバーが利用可能かどうかを確認する方法

    4. MongoDB-コレクションをドロップする