2012-04-06 3 views
1

DB Mongo - L'agrégation des données (dans MongoDB 2.1.0 - unstable):

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

Je ne sais pas ce que je fais mal comme l'exemple dans: http://www.mongodb.org/display/DOCS/Aggregation+Framework+-+%24group

montre comment l'agrégation est effectuée.

J'apprécierais un peu d'aide. Merci.

Répondre

0

Il y a deux problèmes.

1.) Vous avez des documents qui n'ont pas de nom de serveur dans votre collection. Vous pouvez les trouver faire une trouvaille ({serverName: null})

2.) Vous devez $ Déroulez le tableau premier

Voici un échantillon de travail:

> 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

Merci, excellente réponse. C'est plus rapide que d'effectuer une forme de carte/réduire pour faire la même chose? Si je voulais le sortir dans une nouvelle collection, alors $ out est utilisé comme j'ai essayé et cela n'a pas fonctionné. – sam0673

+0

Le cadre d'agrégation n'est pas publié, ni fait, et $ out n'est pas encore implémenté - veuillez regarder ce numéro: https://jira.mongodb.org/browse/SERVER-3253 –