2016-02-15 2 views
0

У меня есть эта модель данных:граф вложенный элемент с условием MongoDB

{_id: 1, userId: 1, elements: [{type:'a', startDate: 2015-10-10 20:00:00}]}, 
{_id: 2, userId: 2, elements: [{type:'b', startDate: 2016-10-10 20:00:00}]}, 
{_id: 3, userId: 1, elements: [{type:'c', startDate: 2016-10-10 20:00:00}]}, 
{_id: 4, userId: 1, elements: [{type:'a', startDate: 2016-10-10 20:00:00}]} 

Я хотел бы, чтобы сосчитать все элементы для пользователя с условием на startDate.

, например, подсчитать количество элементов для userId:1 и startDate больше 2016-10-09 20:00:00

Я попытался

db.collection.aggregate([ 
    {'$match': {userId: 1}}, 
    {$group: {_id: null, elements: {$sum: { 
     "$cond": [ 
       { $gte : ['$elements.startDate', new ISODate("2016-10-09T20:00:00Z")] }, 
       1, 
       0 
      ] 
     } 
    }}} 
]); 

Результат должен быть 2, но это не работает, у вас есть какие-либо решения?

ответ

1

Необходимо сначала указать unwindelements.

db.collection.aggregate([ 
    {'$match': {userId: 1}}, 
    {$unwind: "$elements"}, 
    {$group: {_id: null, elements: {$sum: { 
     "$cond": [ 
       { $gte : ['$elements.startDate', new ISODate("2016-10-09T20:00:00Z")] }, 
       1, 
       0 
      ] 
     } 
    }}} 
]); 

В качестве примечания, убедитесь, ваш sum материал делает именно то, что вы ожидаете, когда есть несколько документов в elements массиве.

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