Получить последние вставки списка типов свойств disctinct в mongodb - PullRequest
1 голос
/ 29 мая 2020

У меня есть коллекция Аккаунта. Каждый документ Учетной записи имеет 3 свойства _id, тип, возраст; и есть 3 различных типа: Мужской, Женский и Другой. Любой отдельный документ будет иметь только один из типов.

{
_id:ObjectId(xxxxx1),
type:"Male",
age:20

}
{
_id:ObjectId(xxxxx2),
type:"Female",
age:20

}
{
_id:ObjectId(xxxxx3),
type:"Male",
age:21

}
{
_id:ObjectId(xxxxx4),
type:"Other",
age:30

}
{
_id:ObjectId(xxxxx5),
type:"Female",
age:31

}

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

{
_id:ObjectId(xxxxx3), <--- last insert of the Male type
type:"Male",
age:21

}
{
_id:ObjectId(xxxxx4), <--- last insert of the Other type
type:"Other",
age:30

}
{
_id:ObjectId(xxxxx5), <--- last insert of the Female type
type:"Female",
age:31

}

Как я могу разработать запрос для этого?

1 Ответ

1 голос
/ 29 мая 2020

Вам необходимо использовать агрегацию MongoDB :

db.Account.aggregate([
      {$group : {_id : '$type', lastDoc : {$last : '$$ROOT'}}},
      {$replaceRoot : {newRoot : '$lastDoc'}}])

Тест: mongoplayground

Пояснение :

  1. В совокупности этап $group сгруппирует все соответствующие документы на основе условия _id : '$type', поэтому все документы с одинаковым type будут сгруппированы вместе с использованием $last мы получим последний документ в процессе группировки.

  2. Используя replaceRoot, мы сделаем lastDoc объект новым root документа.

...