MongoDB 按字段对子文档中不同的数组元素进行分组
MongoDB group by field for distinct array elements in sub document
我有以下文档结构:
{
"_id" : ObjectId("576c5402eef7285c58f6a681"),
"asOfDate" : 20160602,
"universe" : [
{
"memberOf" : [
"group1",
"group2",
"group3",
"group4",
"group5"
],
"personName" : "John"
},
{
"memberOf" : [
"group22",
"group2",
],
"personName" : "Mary"
}]
},
{
"_id" : ObjectId("576c5402eef7285c58f6a684"),
"asOfDate" : 20160603,
"universe" : [
{
"memberOf" : [
"group1",
"group2",
"group6"
],
"personName" : "Chris"
},
{
"memberOf" : [
"group7",
"group5",
],
"personName" : "Jack"
}]
}
我正在尝试为集合中的每个 asOfDates
获取不同 universe.memberOf
的列表。所需的输出如下。我能想到的唯一方法是 运行 每个日期都不同。但是我必须为每个日期循环,这可能效率不高。
{
20160602 : ["group1", "group2", "group3", "group4", "group5", "group22"],
20160603 : ["group1", "group2", "group6", "group7", "group5"]
}
有了聚合管道,它可能看起来像这样
db.getCollection('fooBar').aggregate([
{
$unwind: {
path: "$universe"
}
},
{
$unwind: {
path: "$universe.memberOf"
}
},
{
$group: {
_id: "$asOfDate",
memberOf: {
$addToSet: "$universe.memberOf"
}
}
}
])
这将导致
/* 1 */
{
"_id" : 20160603,
"memberOf" : [
"group5",
"group7",
"group6",
"group2",
"group1"
]
}
/* 2 */
{
"_id" : 20160602,
"memberOf" : [
"group22",
"group5",
"group3",
"group1",
"group2",
"group4"
]
}
我有以下文档结构:
{
"_id" : ObjectId("576c5402eef7285c58f6a681"),
"asOfDate" : 20160602,
"universe" : [
{
"memberOf" : [
"group1",
"group2",
"group3",
"group4",
"group5"
],
"personName" : "John"
},
{
"memberOf" : [
"group22",
"group2",
],
"personName" : "Mary"
}]
},
{
"_id" : ObjectId("576c5402eef7285c58f6a684"),
"asOfDate" : 20160603,
"universe" : [
{
"memberOf" : [
"group1",
"group2",
"group6"
],
"personName" : "Chris"
},
{
"memberOf" : [
"group7",
"group5",
],
"personName" : "Jack"
}]
}
我正在尝试为集合中的每个 asOfDates
获取不同 universe.memberOf
的列表。所需的输出如下。我能想到的唯一方法是 运行 每个日期都不同。但是我必须为每个日期循环,这可能效率不高。
{
20160602 : ["group1", "group2", "group3", "group4", "group5", "group22"],
20160603 : ["group1", "group2", "group6", "group7", "group5"]
}
有了聚合管道,它可能看起来像这样
db.getCollection('fooBar').aggregate([
{
$unwind: {
path: "$universe"
}
},
{
$unwind: {
path: "$universe.memberOf"
}
},
{
$group: {
_id: "$asOfDate",
memberOf: {
$addToSet: "$universe.memberOf"
}
}
}
])
这将导致
/* 1 */
{
"_id" : 20160603,
"memberOf" : [
"group5",
"group7",
"group6",
"group2",
"group1"
]
}
/* 2 */
{
"_id" : 20160602,
"memberOf" : [
"group22",
"group5",
"group3",
"group1",
"group2",
"group4"
]
}