2012-04-06 35 views
1

蒙戈DB - 數據的聚合(MongoDB中2.1.0 - 不穩定的版本):

db.test.save({serverName:'abc123', info:[12,43,23,10]}); 

db.test.save({serverName:'abc123', info:[12,22,19,11]}); 

db.test.aggregate({$group:{_id:"$serverName", infoTotal:{ $sum : "$info"}}}); 

Response: "errmsg" : "exception: the _id field for a group must not be undefined", 

不知道我做錯了作爲例子在:http://www.mongodb.org/display/DOCS/Aggregation+Framework+-+%24group

顯示瞭如何執行聚合。

希望得到一些幫助。謝謝。

回答

0

有兩個問題。

1.)您有一些文檔在您的集合中沒有serverName。你可以找到他們做了查找({服務器名:空})

2)您需要$放鬆數組第一

這裏是工作示例:

> db.agg1.find() 
{ "_id" : 1, "serverName" : "abc123", "info" : [ 12, 43, 23, 10 ] } 
{ "_id" : 2, "serverName" : "abc124", "info" : [ 12, 22, 19, 11 ] } 
{ "_id" : 3, "serverName" : "abc124", "info" : [ 1, 25, 2, 11 ] } 

> db.agg1.aggregate({$unwind: "$info"},{$group:{_id:"$serverName", infoTotal:{ $sum : "$info"}}}); 
{ 
     "result" : [ 
       { 
         "_id" : "abc123", 
         "infoTotal" : 88 
       }, 
       { 
         "_id" : "abc124", 
         "infoTotal" : 103 
       } 
     ], 
     "ok" : 1 
} 
+0

感謝,偉大的答案。這比執行某種形式的map/reduce來做同樣的事情要快嗎?如果我想將它輸出到一個新的集合,那麼$ out就會被使用,因爲我嘗試了這一點,但它不起作用。 – sam0673 2012-04-14 00:20:30

+0

聚合框架沒有發佈,也沒有完成,$ out尚未實現 - 請觀看此問題:https://jira.mongodb.org/browse/SERVER-3253 – 2012-04-14 18:07:06