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

MongoDBの配列フィールドでアイテムの組み合わせを取得する方法は?

    与えられた例からあなたの関係を正しく理解していれば、このクエリはあなたの問題の解決策になるはずです:

    db.collection.aggregate([{
                $unwind : "$keywords"
            }, {
                $lookup : {
                    from : "collection",
                    localField : "_id",
                    foreignField : "_id",
                    as : "items"
                }
            }, {
                $unwind : "$items"
            }, {
                $unwind : "$items.keywords"
            }, {
                $redact : {
                    $cond : {
                        if  : {
                            $cmp : ["$keywords", "$items.keywords"]
                        },
                    then : "$$DESCEND",
                    else  : "$$PRUNE"
                }
            }
        }, {
            $group : {
                _id : {
                    k1 : "$keywords",
                    k2 : "$items.keywords",
                },
                items : {
                    $sum : 0.5
                }
            }
        }, {
            $sort : {
                "_id" : 1
            }
        }, {
            $project : {
                _id : 1,
                items : 1,
                a : {
                    $cond : {
                        if  : {
                            $eq : [{
                                    $cmp : ["$_id.k1", "$_id.k2"]
                                }, 1]
                        },
                    then : "$_id.k2",
                    else  : "$_id.k1"
                }
            },
            b : {
                $cond : {
                    if  : {
                        $eq : [{
                                $cmp : ["$_id.k1", "$_id.k2"]
                            }, -1]
                    },
                then : "$_id.k2",
                else  : "$_id.k1"
            }
        },
    
    }
    }, {
        $group : {
            _id : {
                k1 : "$a",
                k2 : "$b",
            },
            items : {
                $sum : "$items"
            }
        }
    }, {
        $project : {
            _id : 0,
            item1 : "$_id.k1",
            item2 : "$_id.k2",
            count : "$items"
        }
    }
    ])
    
    {
        "item1" : "cs",
        "item2" : "dd",
        "count" : 1.0
    }
    {
        "item1" : "cs",
        "item2" : "ee",
        "count" : 1.0
    }
    {
        "item1" : "cs",
        "item2" : "se",
        "count" : 2.0
    }
    {
        "item1" : "dd",
        "item2" : "se",
        "count" : 1.0
    }
    {
        "item1" : "ee",
        "item2" : "se",
        "count" : 1.0
    }
    



    1. 大規模なデータベースを効果的に管理する方法

    2. コレクションではなく、特定のレコードに対するMongodb集計クエリ

    3. ASP.NETセッション状態プロバイダーを使用してRedisサーバーに接続できません

    4. Redisデータ構造の概要:セット