Mongodb中的按数组元素分组

Mongodb中的按数组元素分组,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我们有嵌套文档,并试图按数组元素分组。我们的文档结构看起来像 /*1*/ { “_id”:ObjectId(“5a690a4287e0e50010af1432”), “slug”:[ “真正的犯罪——十大最臭名昭著的——美国谋杀——谜团”, “十大最臭名昭著的美国谋杀案” ], “标签”:[ { “id”:“59244aa6b1be5055278e9b5b”, “姓名”:“真正的罪行”, _id:“59244aa6b1be5055278e9b5b” }, { “id”:“5924524db1

我们有嵌套文档,并试图按数组元素分组。我们的文档结构看起来像

/*1*/
{
“_id”:ObjectId(“5a690a4287e0e50010af1432”),
“slug”:[
“真正的犯罪——十大最臭名昭著的——美国谋杀——谜团”,
“十大最臭名昭著的美国谋杀案”
],
“标签”:[
{
“id”:“59244aa6b1be5055278e9b5b”,
“姓名”:“真正的罪行”,
_id:“59244aa6b1be5055278e9b5b”
}, 
{
“id”:“5924524db1be5055278ebd6e”,
“名称”:“神秘博物馆”,
_id:“5924524db1be5055278ebd6e”
}, 
{
“id”:“5a690f0fc1a72100110c2656”,
“_id”:“5a690f0fc1a72100110c2656”,
“姓名”:“谋杀之谜”
}, 
{
“id”:“59244d71b1be5055278ea654”,
“姓名”:“未解决的谋杀案”,
“_id”:“59244d71b1be5055278ea654”
}
]

}
不要使用
slug
作为
\u id
的一部分,您应该使用或累积它们,请尝试:

db.test.aggregate([
    {
        $unwind: "$tags"
    },
    {
        $unwind: "$slug"
    },
    {
        $group: {
            _id: "$tags.name",
            slugs: { $addToSet: "$slug" }
        }
    },
    {
        $project: {
            _id: 1,
            slugs: {
                $reduce: {
                    input: "$slugs",
                    initialValue: "",
                    in: {
                        $concat: [ "$$value", ",", "$$this" ]
                    }
                }
            }
        }
    }
])
编辑:获取可以与一起使用的段塞的逗号分隔字符串

输出:

{ "_id" : "murder mysteries", "slugs" : ",10-most-infamous-american-murder-mysteries,true-crime-the-10-most-infamous-american-murder-mysteries" }
{ "_id" : "Occult Museum", "slugs" : ",10-most-infamous-american-murder-mysteries,true-crime-the-10-most-infamous-american-murder-mysteries" }
{ "_id" : "unsolved murders", "slugs" : ",10-most-infamous-american-murder-mysteries,true-crime-the-10-most-infamous-american-murder-mysteries" }
{ "_id" : "true crime", "slugs" : ",10-most-infamous-american-murder- mysteries,true-crime-the-10-most-infamous-american-murder-mysteries" }

你能用你想要的查询的预期输出更新这个问题吗?这几乎就是我需要的。有没有办法让slug作为逗号分隔的字符串而不是数组?我需要将此数据导出到excel,它会创建不必要的空数据columns@jvm修改了我的回答非常感谢@mickl