2017-04-11 8 views
0

以下のクエリは、毎年のモデルの合計を示しています。最大のモデルが作られた年を見つけなければならない。 (データは、製造業者に別の配列である)mongodbの合計の最大値

db.structure.aggregate([ 
    {$unwind : "$manufacturers"}, 
     {$group: { 
      _id: { 
       day:"$_id.year" 
      }, 
      count: { $sum: "$manufacturers.data.modelName" } 
     }}, 
     {$sort: {count : -1}}, 
     {$out : "out"} 
    ]); 
+0

あなたがサンプルから 'structure'収集し、あなたの予想出力から私たちにいくつかのサンプル文書を示していただけますか? – chridam

答えて

1
  1. グループモデル
  2. 制限クエリの和に応じ
  3. ソートその年に作られたモデルの年
  4. カウント総数で1

最大のモデルが作成された年が表示されます。

だからあなたのクエリ(Java実装)は以下のようになります。

 // Group by Year 
    DBObject groupFields = new BasicDBObject("_id", "$_id.year"); 

    //Count total no of models made in that year 
    groupFields.put("sum", new BasicDBObject("$sum", "$manufacturers.data.modelName")); 

    //Group the fields 
    DBObject group = new BasicDBObject("$group", groupFields); 

    //Sort in descending order inorder to get maximum models 
    DBObject sortFields = new BasicDBObject("sum", -1); 
    DBObject sort = new BasicDBObject("$sort", sortFields); 

    //Limit to one since you need the year when maximum models were made 
    DBObject limit = new BasicDBObject("$limit", 1); 
    AggregationOutput output = myColl.aggregate(group,sort,limit); 

・ホープ、このことができます。ご入力の編集

db.structure.aggregate([ 
{$unwind : "$manufacturers"}, 
    {$group: { 
     _id: { 
      day:"$_id.year" 
     }, 
     count: { $sum: "$manufacturers.data.modelName" } 
    }}, 
    {$sort: {count : -1}}, 
    //Limit by 1 to get year when maximum models where made 
    {$limit : 1}, 
    {$out : "out"} 
]); 
関連する問題