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