2013-06-20 6 views
1

У меня есть много строк, подобных этому в моей коллекции mongodb. Обратите внимание, что внутри «категории» имеется много пар ключей.Mongodb query Совокупные документы

Есть ли способ написать агрегированный запрос, чтобы суммировать все значения внутри категории с предикатом на дату, например Date:/20130202 /, поэтому он выбирает все строки, начиная с 20130202, а также суммирует значения вида спорта , national, int, finance etc и выводит значения, т.е.

спорта: 42, национальный: 6, международный: 11, финансы: 9, другие: 17, техник: 20, Музыка: 34

{ 
    "_id" : ObjectId("51c34a871d56bd16c34e7887"), 
    "Date" : "2013020219", 
    "category" : { 
    "sport" : 40, 
    "national" : 2, 
    "international" : 6, 
    "finance" : 2, 
    "others" : 16, 
    "tech" : 10, 
    "Music" : 32 
    } 
} 
{ 
    "_id" : ObjectId("51c34a871d56bd16c34e7887"), 
    "Date" : "2013020218", 
    "category" : { 
    "sport" : 2, 
    "national" : 4, 
    "international" : 5, 
    "finance" : 7, 
    "others" : 1, 
    "tech" : 10, 
    "Music" : 2 
    } 

}

+0

Похоже, вы просто напишете агрегацию для группировки по данным, а затем «$ sum» каждую «категорию» по имени ('category.sport'). – WiredPrairie

ответ

1

Вы можете Попробуйте:

db.coll.aggregate([ 
    { $match: { Date: /20130202/ } }, 
    { $group: { _id: null, 
       sport: { $sum: "$category.sport" }, 
       national: { $sum: "$category.national" }, 
       international: { $sum: "$category.international" }, 
       finance: { $sum: "$category.finance" }, 
       others: { $sum: "$category.others" }, 
       tech: { $sum: "$category.tech" }, 
       Music: { $sum: "$category.Music" } 
       } } 
])