2014-12-28 4 views
0

У меня есть документы, как следующийMongoDB агрегирование на Ключах поддокументе

{ 
    date: ISODate(some-date) 
    story: { 
    a: 24, 
    b: 12 
    } 
}, 

{ 
    date: ISODate(some-date) 
    story: { 
    b: 16, 
    c: 14 
    } 
} 

И я хочу, чтобы получить результат, несколько, как:

{ 
    a: 24, 
    b: 28, 
    c: 14 
} 

Я смотрел на это во многих местах но не смог найти способ сделать это. Очевидно, что отдых не работает, поскольку он не является подмассивом. И я не могу понять, как использовать группу в этом.

+0

Я думаю, что вы могли бы сделать это с a map уменьшить http://docs.mongodb.org/manual/core/map-reduce/ или с http: //docs.mongod b.org/manual/core/aggregation-pipeline/, но я не знаком с последними. – gimpycpu

+0

Я пытаюсь получить его с конвейером агрегации, но пока не повезло. –

ответ

1

Если вы группировки по всей коллекции, просто использовать постоянное значение как null для группировки _id:

db.test.aggregate([ 
    {$group: { 
     _id: null, 
     a: {$sum: '$story.a'}, 
     b: {$sum: '$story.b'}, 
     c: {$sum: '$story.c'}, 
    }} 
]) 

Выход:

{ 
    "result" : [ 
     { 
      "_id" : null, 
      "a" : 24, 
      "b" : 28, 
      "c" : 14 
     } 
    ], 
    "ok" : 1 
} 
+0

И если я не знаю, какие ключи могли бы быть? Как я не знаю, есть ли это яблоки или яблоки. –

+1

Это совсем другой (и беспорядочный) вопрос. См. Http://stackoverflow.com/questions/25187453/mongodb-aggregate-sum-each-key-on-a-subdocument – JohnnyHK

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