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

Mongo集計フレームワークを使用した同時発生カウント

    集約はかなり長いですが、機能します。アイデアは、ペアを構築する必要があるということです(x,y) client_interactionsに基づく 配列。これは、 $reduce を使用して実行できます。 および $ map 。次に、 $unwind を実行する必要があります。 といくつかの $ group 集約されたデータを「巻き上げる」ためのステージ。 $arrayToObject も必要です キーを動的に作成します。

    db.collection.aggregate([
        {
            $addFields: {
                "client_interactions": {
                    $filter: { input: "$client_interactions", cond: { $eq: [ "$$this.productType", "A" ] } }
                }
            }
        },
        {
            $project: {
                a: {
                    $reduce: {
                        input: "$client_interactions",
                        initialValue: [],
                        in: {
                            $concatArrays: [
                                "$$value",
                                { $map: { input: "$client_interactions", as: "c",  in: { x: "$$this.productId", y: "$$c.productId" } } }
                            ]
                        }
                    }
                }
            }
        },
        {
            $unwind: "$a"
        },
        {
            $match: {
                $expr: {
                    $ne: [ "$a.x", "$a.y" ]
                }
            }
        },
        {
            $sort: {
                "a.x": 1,
                "a.y": 1
            }
        },
        {
            $group: {
                _id: "$a",
                count: { $sum: 1 }
            }
        },
        {
            $group: {
                _id: "$_id.x",
                arr: { $push: { k: "$_id.y", v: "$count" } }
            }
        },
        {
            $group: {
                _id: null,
                "co-ocurrences-count": { $push: { k: "$_id", v: { $arrayToObject: "$arr" } } }
            }
        },
        {
            $project: {
                _id: 0,
                "co-ocurrences-count": { $arrayToObject: "$co-ocurrences-count" }
            }
        }
    ])
    

    Mongo Playground




    1. 条件付きで集約パイプラインステージを含める

    2. Mongoidのインストール後にActiveRecordジェネレーターを使用していますか?

    3. サーバー検出および監視エンジンは非推奨です

    4. MongoDBテキストインデックス配列オブジェクト列