2012-04-06 6 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", 

わかりませんin:http://www.mongodb.org/display/DOCS/Aggregation+Framework+-+%24group

は、どのように集約が実行されるかを示します。

助けていただければ幸いです。ありがとう。

答えて

0

2つの問題があります。

1.)コレクションにserverNameのないドキュメントがあります。あなたがそれらを見つけるやって見つけることができます

> 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

おかげで、素晴らしい答え:あなたがここに

最初の配列をほどく$する必要があります({serverNameのヌル})

2)のワーキングサンプルです。これは同じことをするためにmap/reduceの何らかの形式を実行するよりも速いのですか?もし私が新しいコレクションに出力したいのであれば、これを試してみると$ outが使用され、うまくいきませんでした。 – sam0673

+0

アグリゲーションフレームワークはリリースされておらず、完了しておらず、$ outはまだ実装されていません - この問題を見てください:https://jira.mongodb.org/browse/SERVER-3253 –