2012-04-06 7 views
1

Mongo DB - Aggregation von Daten (in MongoDB 2.1.0 - Instabile release):

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", 

nicht sicher, was ich falsch, wie das Beispiel tue in: http://www.mongodb.org/display/DOCS/Aggregation+Framework+-+%24group

zeigt, wie die Aggregation durchgeführt wird.

Ich würde einige Unterstützung zu schätzen wissen. Vielen Dank.

Antwort

0

Es gibt zwei Probleme.

1.) Sie haben einige Dokumente, die keinen serverName in Ihrer Sammlung haben. ({: Null -serverName})

2.) Sie müssen $ entspannen das Array erste

Hier ist eine Arbeitsprobe:

> 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

Danke, große Antwort Sie können sie tun, eine Suche zu finden. Dies ist schneller als das Ausführen einer Form von map/reduce, um dasselbe zu tun? Wenn ich es in eine neue Sammlung ausgeben wollte, dann ist $ out verwendet, wie ich es versucht habe und es hat nicht funktioniert. – sam0673

+0

Das Aggregationsframework wurde noch nicht veröffentlicht, und $ out wurde noch nicht implementiert. Bitte beachten Sie dieses Problem: https://jira.mongodb.org/browse/SERVER-3253 –