使用集合Users
,是否可以检索以下唯一的组织/所有者列表?如果无法进行当前设置,是否可以通过一个查询从两个ID链接的集合中获得相同的结果?
目前,使用Mongoose我只能检索组织名称组:
当前查询
userModel.aggregate([
{ $unwind:'$organisations' }
, { $group: { name: '$organisations.name' } }
])
用户
{ "_id" : ObjectId("53f4a94e7c88310000000001"),
"email" : "bob@example.com",
"organisations" : [
{
"name" : "OrgOne",
"isOwner" : true
}
]
},
{ "_id" : ObjectId("53f4a94e7c88310000000002"),
"email" : "ash@something.com",
"organisations" : [
{
"name" : "OrgOne"
}
]
},
{ "_id" : ObjectId("53f4a94e7c88310000000003"),
"email" : "george@hello.com",
"organisations" : [
{
"name" : "OrgTwo",
"isOwner" : true
}
]
}
结果
{ "orgName" : "OrgOne",
"owner" : 53f4a94e7c88310000000001
},
{ "orgName" : "OrgTwo",
"owner" : 53f4a94e7c88310000000003
}
先谢谢你,尼克
答案 0 :(得分:2)
似乎对我来说是一种奇怪的聚合使用,但是每个用户可能有几个“组织”,所以我想我会继续:
userModel.aggregate(
[
{ "$match": { "organisations.isOwner": true } },
{ "$unwind": "$organisations" },
{ "$match": { "organisations.isOwner": true } },
{ "$group": {
"_id": "$organisations.name",
"owner": { "$first": "$_id" }
}}
],
function(err,result) {
}
);
如果有多个所有者,并且您需要一些优先权,那么您可以在该群组之前实施 $sort
。或者只是 $project
而不是分组才能吸引所有人。