2016-08-03 104 views
0

我在用戶收集用戶文件如下所示貓鼬 - 由陣列元件組,計數和分類由計數

[ 
{ 
_id:"1", 
user_name:"abc", 
name:"ABC", 
following:["xyz"] 
}, 
{ 
_id:"2", 
user_name:"xyz", 
name:"XYZ", 
following:[] 
}, 
{ 
_id:"3", 
user_name:"pqr", 
name:"PQR", 
following:["xyz","abc"] 
} 
] 

欲組由以下屬性,計數,然後排序 - 因此我得到最受熱捧用戶的文檔如下圖所示

[ 
{ 
_id:"2", 
user_name:"xyz", 
name:"XYZ", 
followers_count:2 
}, 
{ 
_id:"1", 
user_name:"abc", 
name:"ABC", 
followers_count:1 
}, 
{ 
_id:"3", 
user_name:"pqr", 
name:"PQR", 
followers_count:0 
} 
] 

回答

0
db.users.aggregate([ 
       {$unwind: "$following" }, 
       {$group: { _id: "$following","username": {$first:"$user_name"},"name": {$first:"$name"},followers_count: { $sum: 1 } }}, 
       {$project: {"name":"$name","user_name": "$username", _id:0, followers_count: 1 } }, 
       {$sort: { followers_count: 1 } } 
]) 

而且,

更新:

沒有必要通過管道在你的情況下使用組,您可以通過

db.tests.aggregate([ 

       { 
        $project : { 
           user_name:1, 
           name :1, 
           followingUsers: { $size: "$following" } 
          } 
       }, 
       {$sort: { followingUsers: 1 } } 
]) 
+0

感謝您的答覆achive相同。上述查詢給我的迴應 [ { 「_id」: 「XYZ」, 「FOLLOWERS_COUNT」:2 }, { 「_id」: 「ABC」, 「FOLLOWERS_COUNT」:1 } ] 我怎樣才能得到用戶的其他領域,如名稱,_id等? –

+0

使用上面的查詢 – rroxysam

+0

上面更新查詢給了我'[ { 「名」: 「PQR」, 「FOLLOWERS_COUNT」:1, 「USER_NAME」: 「焊接工藝評定」 }, { 「名」:「 ABC「, 」followers_count「:2, 」user_name「:」abc「 } ]' ]我需要名稱和_id屬性(以及followers_count)的用戶被關注的不是追隨者。 –