2016-03-16 3 views
2

У меня есть поддокумент с массивом имен. Я хочу количество уникальных имен в коллекции. Документ выглядит следующим образом:Подсчет уникальных элементов в массиве поддокументов

{name: "salesman", 
people: [{name: "Joe"}, {name: "Brian"}]} 

Я бежал:

db.jobs.aggregate([ 
    {$unwind: "$job.people"}, 
    {$group: {_id: "$job.people.name"}}, 
    {$group: {_id: null, total: {$sum: 1}}} 
]); 

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

Есть ли предпочтительный метод подсчета количества уникальных элементов в массиве поддокумента?

+0

@ JohnnyHK да, это гораздо лучший способ сделать это; вы можете ответить на этот вопрос, и я приму это. –

ответ

1

Другой способ сделать это - использовать функцию distinct, чтобы получить массив различных значений встроенного поля name, а затем проверить его длину.

В оболочке:

db.jobs.distinct('job.people.name').length 

Это предполагает, что уровень job что вы целого документа показать в своем коде, но не ваш пример документа, на самом деле, есть. В противном случае это будет 'people.name'.

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