2016-11-29 2 views
0

は私の文書であるグループの前にそれらをメンバーの数を数える:がここ

member: [ 
    { 
     name: 'Jack', 
     group: 0 
    }, 
    { 
     name: 'Rose', 
     group: 0 
    }, 
    { 
     name: 'Tom', 
     group: 1 
    } 
] 

まず、グループにそれらを、その後、メンバーの数を数えます。

リターン:?

{ 
    count: 3, 
    member: [ 
     [ 
      {name: 'Jack'}, 
      {name: 'Rose'} 
     ], 
     [ 
      {name: 'Tom'} 
     ] 
    ] 
} 

はどのように行うにはどうもありがとうございました!

+0

を試してみましたか? – Yogesh

+0

私の質問は分かりませんか? – aweiu

+1

はい、私はあなたの質問を理解しています。あなたは何を試してみることができますか?あなたのアプローチはこれを解決するために? – Yogesh

答えて

0

まず、あなたは彼らが、クエリの下に確認することをunwindmemberとグループの後、$project$sizeを使用してmember配列サイズを計算する必要があります:あなたは

db.collectionName.aggregate({ 
    "$project": { 
    "count": { 
     "$size": "$member" 
    }, 
    "member": 1 
    } 
}, { 
    "$unwind": "$member" 
}, { 
    "$group": { 
    "_id": "$member.group", 
    "data": { 
     "$push": { 
      "name": "$member.name" 
     } 
    }, 
    "count": { 
     "$first": "$count" 
    } 
    } 
}, { 
    "$group": { 
    "_id": "$count", 
    "member": { 
     "$push": "$data" 
    } 
    } 
}).pretty() 
+0

ああ!ありがとう!私は最後の$グループを忘れて、他はあなたのコードと同じです – aweiu

+0

よろしく!だから私はあなたに何を試してみたのですか?) – Yogesh