2016-05-16 6 views
1

私は以下のデータをコレクションに持っています。グループを作成し、Mongo DBのレコードを展開します

> db.person.find().pretty() 
{ 
     "_id" : ObjectId("573a30a9dcf15c037f943f27"), 
     "name" : "Mark", 
     "age" : 30, 
     "country" : "US" 
} 
{ 
     "_id" : ObjectId("573a30b9dcf15c037f943f28"), 
     "name" : "John", 
     "age" : 34, 
     "country" : "FR" 
} 
{ 
     "_id" : ObjectId("573a30d1dcf15c037f943f29"), 
     "name" : "Rodrigo", 
     "age" : 23, 
     "country" : "IT" 
} 
{ 
     "_id" : ObjectId("573a3194dcf15c037f943f2a"), 
     "name" : "Steve", 
     "age" : 23, 
     "country" : "US" 
} 

私は各国の長寿者の文書を探しています。例えば、上記のデータの結果は次のようになります。

{ 
     "_id" : ObjectId("573a30a9dcf15c037f943f27"), 
     "name" : "Mark", 
     "age" : 30, 
     "country" : "US" 
} 
{ 
     "_id" : ObjectId("573a30b9dcf15c037f943f28"), 
     "name" : "John", 
     "age" : 34, 
     "country" : "FR" 
} 
{ 
     "_id" : ObjectId("573a30d1dcf15c037f943f29"), 
     "name" : "Robert", 
     "age" : 23, 
     "country" : "IT" 
} 

私は集計で試しましたが、それは役に立ちません。実際にMongo DBでこの種の操作を行うことは可能ですか?はいの場合は、解決策を共有してください。

+0

これは役立つかもしれません:http://stackoverflow.com/questions/10612660/select-max-with-group-by-in-mongodb – ggallo

+0

2つの文書が同じ「年齢」値を持つ場合はどうしますか"国"の最大値に対応していますか? – styvane

答えて

2

私はあなたのことを正しく理解すれば、実際にこれを行うことができます。あなたがしようとしていることは、国ごとにグループ化し、最高の年齢を選ぶことです。このような

何かがうまくいくかもしれない:

db.person.aggregate([ 
    {$sort: {country: 1, age: 1}}, 
    {$group: 
     {_id: "$country", 
     doc_id: {$last: "$_id"}, 
     age: {$last: "$age"}, 
     name: {$last: "$name"}} 
    } 
]) 

これは、文書が国に対応したIDを持つ、元の文書のすべての情報を含めて、あなたのそれぞれの最高与えます。グループの後にパイプラインに必要なものを追加することができます。たとえば、プロパティ名が異なるように文書の形を変えたい場合などです。

関連する問題