我的文档结构如下:
{
"_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"
}]
}
我正在尝试为集合中的每个universe.memberOf
获取不同asOfDates
的列表。所需的输出如下。我能想出的唯一方法是为每个日期运行一个不同的。但是我必须为每个日期循环,这可能效率不高。
{
20160602 : ["group1", "group2", "group3", "group4", "group5", "group22"],
20160603 : ["group1", "group2", "group6", "group7", "group5"]
}
答案 0 :(得分:0)
使用聚合管道,它可能看起来像
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"
]
}