2014-12-26 139 views
2

我有一個蒙戈收集以下數據(數據收集):蒙戈DB合計不工作

{ 
    "_id": ObjectId("54980efef7db7d9b018d375b"), 
    "sub_id": "1234567890", 
    "points": "10", 
    "oid": "1", 
    "name": "test", 
    "app": "e53abc6d12fea63c80e4c2e1d49e", 
    "source": "mysource", 
    "product_name": "browser", 
    "added": ISODate("2014-12-22T12:30:54.618Z"), 
    "added_human": "2014-12-22 06:30:54", 
    "checked": true 
} 

其實我需要找出按日期分組分的總和。 SQL查詢將如下所示: SELECT DATE(添加)爲point_date,SUM(points)AS total_points FROM mytable WHERE在'從'和'到'GROUP BY DATE(已添加)之間添加。

所以我用下面的聚合:

db.datacollection.aggregate(
    { 
     $match:{ 
      "added" : {$gte:ISODate("2014-12-01"), $lt:ISODate("2014-12-25")}, 
      "source":"mysource" 
     }, 
     $group : { 
      "_id" : { month: { $month: "$added" }, day: { $dayOfMonth: "$added" }, year: { $year: "$added" } }, 
      "total_points":{$sum:"$points"} 
     } 
    } 
); 

但這正顯示出

"errmsg" : "exception: A pipeline stage specification object must contain exactly one field.", 

這可怎麼固定的或者是有沒有做這種計算沒有更好的方法?

+0

我認爲你應該將你的'points'數據類型字符串改爲整型或浮點型。 – Yogesh

+0

是的。但是,我怎樣才能在飛行中做到這一點? –

+0

您不會隨時更改數據類型,首先您應該將您的集合更新爲適當的數據類型,然後使用mongo聚合。爲了您的參考檢查這個http://stackoverflow.com/questions/18138750/mongodb-aggregate-sum – Yogesh

回答

9

使用本:

db.datacollection.aggregate(
    { 
     $match:{ 
      "added" : {$gte:ISODate("2014-12-01"), $lt:ISODate("2014-12-25")}, 
      "source":"mysource" 
     } 
    }, 
    { $group : { 
      "_id" : { month: { $month: "$added" }, day: { $dayOfMonth: "$added" }, year: { $year: "$added" } }, 
      "total_points":{$sum:"$points"} 
     } 
    } 
); 

你應該(在{}對每一個管道中)使用此格式

db.collection.aggrgation ( 
    { $group: ....}, 
    { $match : .... }, 
    ... 
}) 

,但你使用:

db.collection.aggrgation ( 
    { $group: ...., 
    $match : ...., 
    ... 
    } 
}) 
+0

這顯示像total_points作爲0.it的結果沒有采取SUM。我需要鍵入轉換值? –

+0

但我得到了您的示例文檔的結果。結果:{ 「結果」:[ { 「_id」:{ 「月」:12, 「日」:22, 「年」:2014 }, 「total_points」:0 } ] , 「ok」:1 } – Disposer

+0

是的。我也將total_points作爲零。我需要得到10分值爲10.或者如果有其他記錄,它應該顯示總金額 –

0

的總操作需要在組內{}