2017-05-12 6 views
0

私はデータベース構造を持っていると仮定します。グループはmongodbのフィールドに基づいています

[ 
    {name: "alex" , surname: "brown" , school: "washington"}, 
    {name: "felix" , surname: "yellow" , school: "georgia"}, 
    {name: "felix" , surname: "yellow" , school: "georgia"}, 
    {name: "tommy" , surname: "brown" , school: "davis"}, 
    {name: "tommy" , surname: "brown" , school: "davis"}, 
    {name: "tommy" , surname: "brown" , school: "davis"}, 
    {name: "tommy" , surname: "brown" , school: "davis"} 
] 

私がしたいことは、学校情報でグループ化することです。 その結果は期待通りです。

{ 
    school: davis 
    students: [ 
     {name: "tommy" , surname: "brown"}, 
     {name: "tommy" , surname: "brown"}, 
     {name: "tommy" , surname: "brown"}, 
     {name: "tommy" , surname: "brown"}, 
    ] 

}, 
{ 
    school: georgia 
    students: [ 
     {name: "felix" , surname: "yellow"} 
    ] 

}, 
{ 
    school: washington 
    students: [ 
     {name: "alex" , surname: "brown"} 
    ] 

} 

私のように$groupを使用して考え、このことができるようにします。

db.collection.aggregate([ 
    {$group: {"_id" : "$school", name : "$name" , surname: "$surname"}} 
]) 

しかし、私が思うに、私は$groupを誤解。だから私はどのようにこのクエリを書くことができますか?

+0

[ '$のpush']を見(https://docs.mongodb.com/manual/reference/operator/aggregation/push /) –

+0

私はドキュメントを使用してそれを達成していただきありがとうございます。 https://docs.mongodb.com/manual/reference/operator/aggregation/push/ – mmu36478

答えて

1

あなたは、次の操作を行うことができます:

db.your_collection.aggregate([ 
    { $group : { 
      _id : '$school', 
      'students' : { 
       $push: { name : '$name', surname : '$surname' 
       } 
      } 
     } 
    } 
]) 
+0

これは私が文書をチェックした後に行ったことです。ありがとうございました。 – mmu36478

1

$groupを使用して、_idを超えたフィールドがaccumulator operatorsを使用して定義する必要があります。この場合、あなたはそれぞれの固有のschoolのためにあなたが学生の配列をアセンブルしたいので$pushを使用したい:

db.collection.aggregate([ 
    {$group: { 
     "_id" : "$school", 
     students: {$push: { name : "$name" , surname: "$surname"}} 
    }} 
]) 
+0

これは私が文書をチェックした後に行ったことです。ありがとうございました。 – mmu36478

関連する問題