Ответ 1
Вы можете просто сделать:
db.collection.distinct("children.child_name");
В вашем случае он возвращает:
[ "John", "Anna", "Kevin" ]
Скажем, у меня есть следующие документы в коллекции:
{
"family": "Smith",
"children": [
{
"child_name": "John"
},
{
"child_name": "Anna"
},
]
}
{
"family": "Williams",
"children": [
{
"child_name": "Anna"
},
{
"child_name": "Kevin"
},
]
}
Теперь я хочу получить как-то следующий список уникальных дочерних имен, пересекающих все семейства:
[ "John", "Anna", "Kevin" ]
Структура результата может отличаться. Как добиться этого в MongoDB? Должно быть что-то простое, но я не могу понять. Я попробовал функцию aggregate() в коллекции, но тогда я не знаю, как применить функцию distinct().
Вы можете просто сделать:
db.collection.distinct("children.child_name");
В вашем случае он возвращает:
[ "John", "Anna", "Kevin" ]
с помощью структуры агрегации помощи:
db.collection.aggregate([{$unwind:'$children'}, {$group:{_id:'$children.child_name'}}])
или больше интереса;) с частотой имени:
db.collection.aggregate([{$unwind:'$children'}, {$group:{_id:'$children.child_name', freq:{$sum:1}}}])