MongoDB Aggregate – 展开,组和项目

使用收集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 } 

在此先感谢,尼克

似乎是对我的一个奇怪的使用聚合,但可能有几个“组织”每个用户在这里,所以我想我会继续:

 userModel.aggregate( [ { "$match": { "organisations.isOwner": true } }, { "$unwind": "$organisations" }, { "$match": { "organisations.isOwner": true } }, { "$group": { "_id": "$organisations.name", "owner": { "$first": "$_id" } }} ], function(err,result) { } ); 

如果有多个所有者,并且您需要一些优先级,那么您可以在该组之前实现$sort 。 否则,只是$project而不是小组,以获得每个人。