2016-06-16 2 views
3

Допустим, у нас есть коллекция с документами, как показано нижеMongoDB агрегированные документы

{_id:1, name:'a', category:'c1', count:1} 
{_id:2, name:'b', category:'c1', count:3} 
{_id:3, name:'c', category:'c1', count:5} 
{_id:4, name:'d', category:'c2', count:2} 
{_id:5, name:'e', category:'c2', count:3} 
{_id:6, name:'f', category:'c2', count:6} 
{_id:7, name:'g', category:'c2', count:7} 

Я пытаюсь построить какую-то "aggregation" трубопровода

  1. группы документов по категориям
  2. Для каждого категория, возврат сверху 2 документа по количеству в порядке убывания

Итак, в в случае, ожидаемый результат должен быть что-то вроде

[ 
    {_id:'c1: docs:[ 
     {_id:3, name:'c', category:'c1', count:5}, 
     {_id:2, name:'b', category:'c1', count:3} 
    ]}, 
    {_id:'c2: docs:[ 
     {_id:7, name:'g', category:'c2', count:7}, 
     {_id:6, name:'f', category:'c2', count:6} 
    ]},   
] 

В настоящее время, я беру несколько шагов для получения результата

  1. Определения списка категорий
  2. Repeat находки {категории: х}, {вида: [[ 'граф', 'убывание']], предел: 2} команда
  3. результаты сливаются в один общий массив

есть в любом случае к chieve это в "aggregation" способ?

+0

Вы пытались сделать любой запрос? – Shrabanee

+0

В настоящее время я предпринимаю несколько шагов для работы над этим, как уже упоминалось. – Lee

+1

В любом случае, я понял ответ. Спасибо всем за голосование и комментарии. Выведет ответ за короткое время. – Lee

ответ

0

Удалось решить вопрос самостоятельно. Это что-то вроде ниже.

collection.aggregate([ 
    {$sort:{category:1, count:-1}}, 
    {$group:{_id:'$category', docs:{$push:{_id:'$_id', name:'$name', count:'$count'}}}}, 
    {$project:{_id:1, docs:{$slice:['$docs', 2]}}} 
]) 

$sort, $push и $slice работа tegether играть трюки.

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