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

MongoDBアグリゲーションの配列から可能なすべての組み合わせを取得します🚀

    $reduceを使用できます 配列からペアのすべての組み合わせを抽出します。 この投稿 現在のアイテム$unwindを追加しました 初期配列とアイテムのカウント:

    db.test.aggregate([
        {
            $project: {
                pairs: {
                    $reduce: {
                        input: { $range: [0, { $size: "$keywords" }] },
                        initialValue: [],
                        in: {
                            $concatArrays: [
                                "$$value",
                                [[{ $arrayElemAt: ["$keywords", "$$this"] }]],
                                {
                                    $let: {
                                        vars: { i: "$$this" },
                                        in: {
                                            $map: {
                                                input: { $range: [{ $add: [1, "$$i"] }, { $size: "$keywords" }] },
                                                in: [{ $arrayElemAt: ["$keywords", "$$i"] }, { $arrayElemAt: ["$keywords", "$$this"] }]
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        }, {
            $unwind: "$pairs"
        }, {
            $group: {
                _id: "$pairs",
                count: { $sum: 1 }
            }
        }
    ])
    

    出力:

    { "_id" : [ "online", "samp" ], "count" : 1 }
    { "_id" : [ "gta", "samp" ], "count" : 1 }
    { "_id" : [ "online", "races" ], "count" : 1 }
    { "_id" : [ "moto", "races" ], "count" : 1 }
    { "_id" : [ "gta", "keys" ], "count" : 1 }
    { "_id" : [ "races" ], "count" : 1 }
    { "_id" : [ "gta", "distribution" ], "count" : 1 }
    { "_id" : [ "samp" ], "count" : 1 }
    { "_id" : [ "distribution", "keys" ], "count" : 1 }
    { "_id" : [ "gta" ], "count" : 3 }
    { "_id" : [ "online" ], "count" : 2 }
    { "_id" : [ "keys" ], "count" : 1 }
    { "_id" : [ "gta", "online" ], "count" : 2 }
    { "_id" : [ "moto" ], "count" : 1 }
    { "_id" : [ "online", "moto" ], "count" : 1 }
    { "_id" : [ "distribution" ], "count" : 1 }
    { "_id" : [ "gta", "moto" ], "count" : 1 }
    { "_id" : [ "gta", "races" ], "count" : 1 }
    

    さらに組み合わせが必要な場合は、$reduceを更新する必要があります。 上記のステージ




    1. mongodbで変更されたドキュメントの通知を受け取る

    2. 集計フレームワークを使用して、サブドキュメントのすべてのフィールドをトップレベルドキュメントのフィールドとして簡単に返すことができますか?

    3. Meteorコレクションにmomentjsオブジェクトを挿入する

    4. Redisコンテナを別のコンテナに接続する(Docker)