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

MongoDBの単一のコレクション内のドキュメント間のセットのセット交差を見つける方法は?

    集約フレームワークを使用する 望ましい結果を得るために。集計セット演算子 魔法をかけるのは$setIntersection

    次の集約パイプラインは、あなたが求めているものを実現します。

    db.test.aggregate([
        {
            "$match": {
                "_id": { "$in": [1, 3] }
            }
        },
        {
            "$group": {
                "_id": 0,
                "set1": { "$first": "$set" },
                "set2": { "$last": "$set" }
            }
        },
        {
            "$project": { 
                "set1": 1, 
                "set2": 1, 
                "commonToBoth": { "$setIntersection": [ "$set1", "$set2" ] }, 
                "_id": 0 
            }
        }
    ])
    

    出力

    /* 0 */
    {
        "result" : [ 
            {
                "set1" : [1,2,3,4,5],
                "set2" : [1,2,5,10,22],
                "commonToBoth" : [1,2,5]
            }
        ],
        "ok" : 1
    }
    

    更新

    3つ以上のドキュメントを交差させるには、 $reduceが必要です。 配列をフラット化する演算子。これにより、任意の数のアレイを交差させることができるため、ドキュメント1と3の2つのアレイを交差させるだけでなく、複数のアレイにも適用されます。

    次の集計操作を実行することを検討してください。

    db.test.aggregate([
        { "$match": { "_id": { "$in": [1, 3] } } },
        {
            "$group": {
                "_id": 0,
                "sets": { "$push": "$set" },
                "initialSet": { "$first": "$set" }
            }
        },
        {
            "$project": {
                "commonSets": {
                    "$reduce": {
                        "input": "$sets",
                        "initialValue": "$initialSet",
                        "in": { "$setIntersection": ["$$value", "$$this"] }
                    }
                }
            }
        }
    ])
    



    1. RESTAPIから返された画像は常に壊れて表示されます

    2. ネストされたオブジェクトをクエリする方法は?

    3. MongoDBコンソールで_idで削除

    4. MongoDBを使用してサブドキュメント内の配列をフィルタリングする方法