MongoDB: группа, затем получить запись с максимальным значением для каждой группы - PullRequest
1 голос
/ 19 сентября 2019

В приведенной ниже коллекции я бы хотел сгруппировать по author, а затем для каждого author показать name записи с наибольшим значением price.

[
  { "name": "Design", "price": 499, "author": "ted" },
  { "name": "Launch", "price": 999, "author": "ted" },
  { "name": "Test",  "price": 1200, "author": "bob" },
  { "name": "Scale",  "price": 1499, "author": "bob" }
]

Итак, мой запрос должен возвращать Launch и Scale.

Я попытался выполнить агрегацию следующим образом, но я не уверен, что делать потом, за исключением перетаскивания всех записей на клиента затем обработать все группы, чтобы найти запись с максимальной ценой (что звучит очень неэффективно).

[
  {
    "$group": {
       "_id": "$author",
       "entry": {
         "$push": {
           "price": "$price",
           "name": "$name"
         }
       }
    }
  }
]

Какой эффективный способ сделать это?

Спасибо!

1 Ответ

1 голос
/ 19 сентября 2019

согласно ответу от MongoDB - получить документы с максимальным атрибутом на группу в коллекции

, пожалуйста, попробуйте

db.collection.aggregate([
    { "$sort": {  "price": -1 } },
    { "$group": {
        "_id": "$author",
        "price": { "$first": "$price" },
        "name": { "$first" "$name" }
    }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...