我有一个项目集合,其中项目是这样的:
{
"_id" : ObjectId("57e3e55c638cb8b971"),
"allocInvestor" : "Example Investor",
"fieldFoo" : "foo bar",
"name" : "GTP 3 (Roof Lease)"
}
我希望收到按allocInvestor
字段分组的项目列表,仅显示字段:name
和id
如果我像这样使用聚合和$ group:
db.getCollection('projects').aggregate([
{"$group" : {
_id:"$allocInvestor", count:{$sum:1}
}
}
])
我收到每个allocInvestor的项目数,但我需要的是每个allocInvestor接收带有子项目的allocInvestor列表。
我在途中使用流星以防万一。但我首先想在mongodb上获得正确的查询然后尝试流星。
答案 0 :(得分:1)
使用$$ ROOT运算符引用整个文档,然后使用project删除不需要的字段。
db.projects.aggregate([
{"$group" : {
"_id":"$allocInvestor",
"projects" : {"$addToSet" : "$$ROOT"}
}
},
{"$project" : {
"_id":0,
"allocInvestor":"$_id",
"projects._id":1
"projects.name":1
}
}
])
答案 1 :(得分:0)
您可以使用$ push或$ addToSet为每个组创建名称和_id列表。 $ push允许重复,$ addToSet不再向列表中添加元素(如果已经存在)。
db.getCollection('projects').aggregate([
{ "$group" : { _id : "$allocInvestor",
count : {$sum : 1},
"idList" : {"$addToSet" : "$_id"},
"nameList" : {"$addToSet":"$name"}
}
}
]);
要在单个列表中获取名称和_id数据:
db.getCollection('projects').aggregate([
{ "$group" : { _id : "$allocInvestor", "projects" : {"$addToSet" : {id : "$_id", name: "$name"}}}},
{"$project" : {"_id" : 0, allocInvestor : "$_id", "projects" : 1 }}
]);