Mongodb возвращает каждый отдельный элемент с массивом результатов

Если у меня есть группа клиентов в разных состояниях, например:

{
  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, вероятно, лучший вариант, но я до сих пор не могу этого понять.

Вы должны использовать $ group. db.customers.aggregate({$group:{_id:"$name", location:{"$push":"$location"}}}).

s7vr 26.10.2018 02:29

идеально! Спасибо @Veeram

harleygolfguy 26.10.2018 02:38

@Veeram, предполагая, что в документах есть дата, можно ли их отсортировать по дате до агрегирования, чтобы местоположения были упорядочены по дате?

harleygolfguy 26.10.2018 18:14

да, добавьте {$sort:{datefield:-1}} перед групповым этапом $.

s7vr 26.10.2018 18:15
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
4
20
0

Другие вопросы по теме