Если у меня есть группа клиентов в разных состояниях, например:
{
name: "A",
location: "Boston"
},
{
name: "A",
location: Los Angeles
},
{
name: "B",
location: Cleveland
}
Я хочу вернуть каждое отдельное имя клиента с таким массивом местоположений:
[
{ name: "A", location: [ "Boston", "Los Angeles" ]},
{ name: "B", location: [ "Cleveland" ] }
]
есть идеи как это сделать? Я могу запустить отдельный и получить:
>db.customers.distinct("name");
[ "A", "B" ]
Но я не могу понять, как получить местоположение каждого клиента в массиве. Я также безуспешно пробовал конвейеры агрегации. Я думаю, что $ map или map-reduce, вероятно, лучший вариант, но я до сих пор не могу этого понять.
идеально! Спасибо @Veeram
@Veeram, предполагая, что в документах есть дата, можно ли их отсортировать по дате до агрегирования, чтобы местоположения были упорядочены по дате?
да, добавьте {$sort:{datefield:-1}}
перед групповым этапом $.
Вы должны использовать $ group.
db.customers.aggregate({$group:{_id:"$name", location:{"$push":"$location"}}})
.