2015-12-16 2 views
1

Каков наилучший способ просто указать уникальные значения COUNT в массиве многих моделей? Скажем, моя модель выглядит так:Подсчет уникальных значений в пределах массива модели в MongoDB

{ 
    myKey: [ 
    "idnumber1000", 
    "idnumber1001", 
    "idnumber1005", 
    ] 
} 

И что у меня есть около 10,000 из них, но с разными значениями для myKey. Я хочу знать, сколько у меня РАЗЛИЧНЫХ значений для данного набора коллекций.

Моя первоначальная идея состояла в том, чтобы загрузить ВСЕ модели в память, а затем вычислить это с помощью Node.js. Но по мере того, как мой набор данных может расти много (около 30-50K), это потребует большой памяти на моей машине. Это единственный способ сделать это, или есть другой?

Я использую Mongoose с Node.js

ответ

1

Вы можете сделать это с помощью простого aggregate трубопровода:

MyModel.aggregate([ 
    // Project just the myKey field as that's all that's needed 
    {$project: {_id: 0, myKey: 1}}, 
    // Duplicate each doc, once per myKey element 
    {$unwind: '$myKey'}, 
    // Group on myKey and get a count 
    {$group: {_id: '$myKey', count: {$sum: 1}}} 
    ], 
    function(err, results) {...} 
); 
+0

работал хорошо! Спасибо за рабочий пример. –

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