2012-04-06 5 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

Есть две проблемы.

1.) У вас есть документы, не имеющие имени сервера в вашей коллекции. Вы можете найти их делает находку ({имя_сервера: нулевой})

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

Спасибо, отличный ответ. Это быстрее, чем выполнение какой-либо формы карты/сокращения, чтобы сделать то же самое? Если бы я хотел вывести его в новую коллекцию, тогда используется $ out, поскольку я пробовал это, и это не сработало. – sam0673

+0

Структура агрегации не выпущена и не выполнена, а $ out еще не реализована - просмотрите эту проблему: https://jira.mongodb.org/browse/SERVER-3253 –

 Смежные вопросы

  • Нет связанных вопросов^_^