2017-04-11 26 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
  5. 模型的總數

現在您將獲得最大型號的製造年份。

所以,你的查詢(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"} 
]);