我的收藏看起来像这样
{
"email" : "tp@sd.com",
"subscriptions" : [
{
"default" : false,
"interval" : "weekly",
"tags" : [
{
"name" : "group-1",
"value" : "g1-value-1"
},
{
"name" : "group-1",
"value" : "g1-value-2"
},
{
"name" : "group-2",
"value" : "g2-value-1"
},
{
"name" : "group-3",
"value" : "g3-value-1"
},
{
"name" : "group-3",
"value" : "g3-value-2"
}
]
},
{
"email":"lol@xyz.com",
"subscriptions" : [
{
"default" : false,
"interval" : "weekly",
"tags" : [
{
"name" : "group-1",
"value" : "g1-value-2"
},
{
"name" : "group-1",
"value" : "g1-value-1"
},
{
"name" : "group-2",
"value" : "g2-value-1"
},
{
"name" : "group-2",
"value" : "g2-value-3"
},
{
"name" : "group-3",
"value" : "g3-value-1"
}
]
}
}
我想将它分组到一个包含电子邮件和公共组值的对象数组中。
例如,A user-1有g1-value-1,user-2也有g1-value-1,可能还有其他值。但是这些用户应该和他们的标签一起分组。我该如何实现这一点?
发布于 2019-12-06 01:03:15
令人惊讶的是,这是一个相当简单的查询:
db.collection.aggregate([
{
$unwind: "$subscriptions"
},
{
$unwind: "$subscriptions.tags"
},
{
$group: {
_id: "$subscriptions.tags.value",
emails: {$addToSet: "$email"}
}
}
]); 结果将如下所示:
[
{
_id: "g1-value-1",
emails: [
"tp@sd.com",
"lol@xyz.com"
]
},
{
_id: "g1-value-2",
emails: [
"tp@sd.com",
"lol@xyz.com"
]
},
{
_id: "g2-value-1",
emails: [
"tp@sd.com",
"lol@xyz.com"
]
},
{
_id: "g2-value-3",
emails: [
"lol@xyz.com"
]
},
{
_id: "g3-value-1",
emails: [
"tp@sd.com",
"lol@xyz.com"
]
},
{
_id: "g3-value-2",
emails: [
"tp@sd.com",
]
},
]https://stackoverflow.com/questions/59198457
复制相似问题