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

サブドキュメントの配列をフィルタリングする方法は?

    MongoDB 3.2以降では、 $ filter これに効率的に演算子。 $ filter内 の条件式では、 $ setIsSubset 指定された値が配列にあるかどうかを確認する演算子。これは主に、 $in<を使用できないためです。 / code> $ projectのクエリ演算子 ステージ。

    db.collection.aggregate([
        { "$project": { 
            "list": { 
                "$filter": { 
                    "input": "$list", 
                    "as": "lst", 
                    "cond": { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] }
                } 
            } 
        }}
    ])
    

    MongoDB 3.0.x以降では、を使用した別の効率の悪いアプローチが必要です。 $ map 演算子と $ setDifference オペレーター。

    db.collection.aggregate([
        { "$project": { 
            "list": { 
                "$setDifference": [ 
                    { "$map": { 
                        "input": "$list", 
                        "as": "lst", 
                        "in": { 
                            "$cond": [
                                { "$setIsSubset": [ [ "$$lst.a" ], [ 1, 5 ] ] },
                                "$$lst",
                                false
                            ] 
                        } 
                    }}, 
                    [false] 
                ]
            }
        }}
    ])
    


    1. ノードRedisの保護

    2. mongodbは、あるコレクションのフィールドから他のコレクションのすべてのフィールドの正規表現をチェックします

    3. Mongoは、フィールドに基づいてオブジェクトの配列内の重複を削除します

    4. C#を使用してmongoDBに多形値を持つ辞書を保存する