2014-09-05 22 views
2

使用集合Users,是否可以檢索以下獨特的組織/所有者列表?如果當前設置不可行,是否可以通過一個查詢從兩個ID鏈接集合中獲得相同的結果?MongoDB Aggregate - 展開,組和項目

目前,使用貓鼬我只能檢索集團組織的名稱:

當前查詢

userModel.aggregate([ { $unwind:'$organisations' } , { $group: { name: '$organisations.name' } } ])


用戶

{ "_id" : ObjectId("53f4a94e7c88310000000001"), 
    "email" : "[email protected]", 
    "organisations" : [ 
    { 
     "name" : "OrgOne", 
     "isOwner" : true 
    } 
    ] 
}, 
{ "_id" : ObjectId("53f4a94e7c88310000000002"), 
    "email" : "[email protected]", 
    "organisations" : [ 
    { 
     "name" : "OrgOne" 
    } 
    ] 
}, 
{ "_id" : ObjectId("53f4a94e7c88310000000003"), 
    "email" : "[email protected]", 
    "organisations" : [ 
    { 
     "name" : "OrgTwo", 
     "isOwner" : true 
    } 
    ] 
} 

結果

{ "orgName" : "OrgOne", 
    "owner" : 53f4a94e7c88310000000001 
}, 
{ "orgName" : "OrgTwo", 
    "owner" : 53f4a94e7c88310000000003 
} 

在預先感謝尼克

回答

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而不是團體爲了得到每個人。

+0

感謝您的答案,但這似乎返回一個空的結果。有任何想法嗎? – 2014-09-05 08:49:27

+0

如果僅讓每個用戶擁有一個組織會更簡單,那麼這是一個明確的考慮因素。 – 2014-09-05 08:51:07

+0

@NickPrice錯字「組織」一直在說美國人整天 – 2014-09-05 08:57:02