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

MongoDB集計を使用して、同じドキュメント内の2つのセットのセット交差を検索します

    アグリゲーションフレームワークを使用した完全なソリューションからそれほど遠くはありませんでした。$groupの前にもう1つ必要なものがありました。 ステップとそれは、使用されているすべてのものが所有されているものと一致するかどうかを確認できるようにするものです。

    これが完全なパイプラインです

    > db.house.aggregate(
           {'$unwind':'$uses'}, 
           {'$unwind':'$rooms'}, 
           {'$unwind':'$rooms.owns'}, 
           {$project:  { _id:0, 
                         houseId:1, 
                         uses:"$uses.name", 
                         isOkay:{$cond:[{$eq:["$uses.name","$rooms.owns.name"]}, 1, 0]}
                       }
           }, 
           {$group: { _id:{house:"$houseId",item:"$uses"}, 
                      hasWhatHeUses:{$sum:"$isOkay"}
                    }
           },
           {$match:{hasWhatHeUses:0}})
    

    およびドキュメントへの出力

    {
        "result" : [
            {
                "_id" : {
                    "house" : 123,
                    "item" : "sofa"
                },
                "hasWhatHeUses" : 0
            }
        ],
        "ok" : 1
    }
    

    説明-両方の配列をアンラップしたら、使用済みアイテムが所有アイテムと等しい要素にフラグを付け、それらに0以外の「スコア」を付けます。これで、houseIdで物事を再グループ化するときに、使用済みのアイテムが一致しなかったかどうかを確認できます。スコアに1と0を使用すると、合計を行うことができます。合計が0のアイテムとの一致は、使用されたが「所有」のアイテムと一致しなかったことを意味します。これを楽しんでいただけたでしょうか!



    1. npmスクリプトを使用してmongodbサーバーを起動する

    2. Mongooseのインスタンスメソッドで他のモデルを検索できますか?

    3. 角度5で無限スクロールページネーションを実装する方法は?

    4. MongoDB-自動インクリメント機能を使用してレコードを挿入する方法