如何使用 MongoDB 的 Java 驱动程序将多个文档合并为一个文档?

我正在处理包含音乐播放列表的文档。


每个文档都有这样的结构:


{

    "user_id": "5858",

    "playlists": [

        {

            "name": "My Playlist",

            "guild_ids": ["7575"],

            "items": [

                {

                     "title": "title",

                     "url": "url",

                     "duration": 200000

                } 

            ]

        }

    ]

}

我想提取同一公会的所有播放列表。但问题是我希望结果在单个文档中返回。包含播放列表列表的一个文档。


guild_id=5656 的预期结果如下:


{

    "playlists": [

        {

            "name": "My Playlist",

            "guild_ids": ["5656"],

            "items": [

                {

                     "title": "title",

                     "url": "url",

                     "duration": 200000

                } 

            ]

        },

        // other playlists where guild_ids contains "5656"

    ]

}

我尝试使用聚合,但我总是得到与唯一 user_ids 数量相同的文档数量。我得到按 user_id 分组的播放列表。


斯蒂芬大帝
浏览 101回答 1
1回答

Smart猫小萌

以下查询可以获得预期的输出:db.collection.aggregate([    {        $unwind:"$playlists"    },    {        $match:{            "playlists.guild_ids":{                $in:["7575"]            }        }    },    {        $group:{            "_id":null,            "playlists":{               $push: "$playlists"            }        }    },    {        $project:{            "_id":0        }    }]).pretty()数据集:{  "_id" : ObjectId("5d88225e38db7cf8d3f75cd6"),  "user_id" : "5858",  "playlists" : [    {      "name" : "My Playlist",      "guild_ids" : [        "7575"      ],      "items" : [        {          "title" : "title",          "url" : "url",          "duration" : 200000        }      ]    }  ]}{  "_id" : ObjectId("5d88225e38db7cf8d3f75cd7"),  "user_id" : "5858",  "playlists" : [    {      "name" : "My Playlist 2",      "guild_ids" : [        "1234"      ],      "items" : [        {          "title" : "title",          "url" : "url",          "duration" : 200000        }      ]    }  ]}{  "_id" : ObjectId("5d88225e38db7cf8d3f75cd8"),  "user_id" : "5858",  "playlists" : [    {      "name" : "My Playlist 3",      "guild_ids" : [        "7575"      ],      "items" : [        {          "title" : "title",          "url" : "url",          "duration" : 200000        }      ]    }  ]}输出:{    "playlists" : [        {            "name" : "My Playlist",            "guild_ids" : [                "7575"            ],            "items" : [                {                    "title" : "title",                    "url" : "url",                    "duration" : 200000                }            ]        },        {            "name" : "My Playlist 3",            "guild_ids" : [                "7575"            ],            "items" : [                {                    "title" : "title",                    "url" : "url",                    "duration" : 200000                }            ]        }    ]}查询分析:我们正在展开playlists,仅过滤具有7575公会ID的那些,然后将它们重新分组。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java