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
而不是小组,以获得每个人。