2016-12-29 1 views
0

私のコレクションの特定のフィールドを持つ$ minの集計のすべてのフィールドを含むドキュメントを取得したいとします。以下は

私は$分「を使用」フィールドの値を持つ文書のブランドの個別の値を取得したい

{ 
"_id" : ObjectId("585e7454b0a2683a0f6a3617"), 
"postid":100, 
"region" : "IN", 
"brand" : "Uber", 
"used" : 4 
} 

{ 
"_id" : ObjectId("585e7454b0a2683a0f6a35b7"), 
"postid":101, 
"region" : "UK", 
"brand" : "Airbnb", 
"used" : 7 
} 

{ 
"_id" : ObjectId("585e7454b0a2683a0f6a3619"), 
"postid":102, 
"region" : "US", 
"brand" : "Uber", 
"used" : 9 
} 
{ 
"_id" : ObjectId("585e7454b0a2683a0f6a3619"), 
"postid":103, 
"region" : "US", 
"brand" : "Airbnb", 
"used" : 2 
} 
{ 
"_id" : ObjectId("585e7454b0a2683a0f6a3619"), 
"postid":104, 
"region" : "US", 
"brand" : "Home", 
"used" : 17 
} 

、私のコレクションの構造です。私はこのような出力を取得したい

、事前に現在、私はこのために、このクエリを使用しています
{ 
"_id" : ObjectId("585e7454b0a2683a0f6a3617"), 
"postid":100, 
"region" : "IN", 
"brand" : "Uber", 
"used" : 4 
} 

{ 
"_id" : ObjectId("585e7454b0a2683a0f6a3619"), 
"postid":103, 
"region" : "US", 
"brand" : "Airbnb", 
"used" : 2 
} 
{ 
"_id" : ObjectId("585e7454b0a2683a0f6a3619"), 
"postid":104, 
"region" : "US", 
"brand" : "Home", 
"used" : 17 
} 

db.sales.aggregate(
[ 
{ 
    $group: 
    { 
     _id: "$brand", 
     used: { $min: "$used" } 
    } 
} 
] 
); 

おかげ

答えて

1

あなたが他のフィールドを含める場合グループでは、より良い使用を$firstまたは$lastアキュムレータを使用しています。この場合、あなたは昇順に文書とその後のグループ最初に、あなたの最初のパイプラインのステップとして$sort演算子を使用したいと思います:

db.sales.aggregate([ 
    { "$sort": { "brand": 1, "used": 1 } }, 
    { 
     "$group": { 
      "_id": "$brand", 
      "postid": { "$first": "$postid" }, 
      "region": { "$first": "$region" }, 
      "docId": { "$first": "$_id" }, 
      "used": { "$first": "$used" } 
     } 
    } 
]) 
関連する問題