Элементы подсчета агрегации mongodb из двух массивов

Я пытаюсь подсчитать элементы из двух массивов в одной модели:

Модель:

{_id:1
 name:"fun",
   objectsTypeA: [
        objectId_1
        objectId_2
   ],
   objectsTypeB: [
        objectId_5
        objectId_9
   ]
},
{_id:2
 name:"boring",
   objectsTypeA: [
        objectId_3
        objectId_4
   ],
   objectsTypeB: []
}

Я пытаюсь получить следующий результат:

[
  { name:"fun",
    id: 1,
    count:4
  },
  { name:"boring",
    id: 2,
    count: 2
  ] 

То, что я получил до сих пор, это:

Object.aggregate([
       {$project: {_id:1, name:1, objectsTypeA:1}},
       {$unwind:'$objectsTypeA'},
       {$group: {
           _id: "$name",
    taggableId: {$addToSet:'$_id'},
         count: { $sum: 1}
       }},
   ], function(err, t){
      if (!err){
          res.jsonp(t);
      }
   });

Это в значительной степени то, что я хочу, но это работает только для одного из двух массивов моей модели, я ищу совет о том, как достичь такого результата, если это действительно возможно.

Заранее спасибо.


person Rubs    schedule 02.04.2014    source источник


Ответы (2)



Поскольку есть 2 массива, вам нужно unwind оба массива, чтобы получить счет для обоих массивов. Попробуй это:

Object.aggregate([
       {$project: {_id:1, name:1, objectsTypeA:1,  objectsTypeB:1}},
       {$unwind:'$objectsTypeA'},
       {$unwind:'$objectsTypeB'},
       {$group: {
           _id: "$name",
    taggableId: {$addToSet:'$_id'},
         count: { $sum: 1}
       }},
   ], function(err, t){
      if (!err){
          res.jsonp(t);
      }
   });
person Anand Jayabalan    schedule 02.04.2014