[英]Group collection based on the common values of a field mongodb
我的收藏看起來像這樣
{ "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" } ] } }
我想將其分組為包含電子郵件和常見組值的對象數組。
例如,用戶 1 有 g1-value-1,用戶 2 也有 g1-value-1,可能還有其他值。 但是這些用戶應該與他們的標簽一起分組。 我如何實現這一目標?
令人驚訝的是,這是一個非常簡單的查詢:
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",
]
},
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.