2016-06-10 2 views
0

У меня есть некоторые документы с примерно следующей структурой:Mongoid группировка по нескольким встроенным документам

{ 
"_id": "derp", 
    "name": "thing", 
    "animal": { 
    "_id": "abc", 
    "stuff": [ 
     "blah", 
     "wah" 
    ] 
    }, 
}, 
{ 
    "_id": "nerp", 
    "person": { 
    "_id": "bc", 
    "enough": [ 
     "lah", 
     "ah", 
     "mwah" 
    ] 
    } 
} 

я ищу сосчитать строки в «вещах» массивов и «достаточно». Сначала я думал, что могу что-то сделать, но если я назову его один раз для каждого встроенного документа, «человек» и «животное», тогда я не буду зацикливаться ни на чем.

Я закончил работу с отдельными запросами, чтобы получить подсчеты каждого внутреннего массива «stuff» и «достаточно», но я хотел бы сделать все это в одном запросе.

Кто-нибудь знает, как я буду собирать счет для каждого из них, а затем помещать их в отдельное поле типа «object_count»?

ответ

1

После обновления чата и вопрос - это рабочий раствор на наборе тестовых данных:

var unwind = { 
    $unwind : "$array" 
} 
var project = { 
    $project : { 
     _id : 1, 
     array : { 
      $cond : [{ 
        $ne : ["$a", []] 
       }, "$a", "$b"] 
     } 
    } 
} 

var group = { 
    $group : { 
     _id : "$_id", 
     a : { 
      $push : "$animal.stuff" 
     }, 
     b : { 
      $push : "$person.enough" 
     } 
    } 
} 
var group2 = { 
    $group : { 
     _id : "$_id", 
     sum : { 
      $sum : 1 
     } 
    } 
} 

db.info.aggregate([group, project, unwind, unwind, group2]) 

Основная идея заключается в том, чтобы поместить все вещи в один массив, а затем расслабиться (как мы подталкивают тогда нам нужно отдохнуть дважды) и, наконец, подсчитать.

+0

Hrm ... На самом деле, я думал, что сработал, но мопед говорит «исключение: недействительный оператор» $ size ' – unflores

+0

Какая версия mongo у вас есть? – profesor79

+0

У меня есть версия 2.6.3, поэтому размер должен работать. посмотреть на это немного больше, чтобы увидеть. – unflores

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