2016-08-11 2 views
5

Я ищу способ получить первые два (или любое другое число) количество определенного элемента из данной коллекции.Как сохранить верхний счет (ы) элементов массива в mongoDB?

{"id": "xyz" , "fruits": ["Apple", "Mango"]} 
{"id": "abx", "fruits": ["Apple", "Banana"]} 
{"id" : "pqr", "fruits": ["Apple", "Mango"]} 

В приведенном выше примере, то результат будет: Apple and Mango, так как возникновение Apple (три раза) выше, с последующим Mango (два раза). Нужно ли мне работать с Mongo map-reduce?

Я больше склоняюсь к производительности и стабильности бэкэнд-платформы. Как я могу двигаться вперед, если «число случаев» происходит в реальном времени?

Любая помощь будет заметна.

ответ

2

Вы можете использовать агрегат. Вот простой пример, который предполагает, что стоимость фруктов не будет повторяться в одном документе:

[ 
    { 
     $unwind: "$fruits" 
    }, 
    { 
     $group: { 
      _id: "$fruits", 
      count: {$sum: 1} 
     } 
    }, 
    { 
     $sort: {count:-1} 
    }, 
    { 
     $limit: 2 
    } 
] 
+1

Для выполнения вы можете захотеть проект «фруктов» и выключить «_id» в качестве первого шага, так как он может использовать индексы лучше –

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