Возврат оригинальных документов только из группы / операции агрегации mongoose - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть фильтр + групповая операция с кучей документов (книг).Группировка должна возвращать только последние версии книг с одинаковым book_id (имя).Приведенный ниже код работает, но он неопрятный, так как он возвращает избыточную информацию:

return Book.aggregate([
    { $match: generateMLabQuery(rawQuery) },
    {
        $sort: {
            "published_date": -1
        }
    },
    {
        $group: {
            _id: "$book_id",
            books: {
                $first: "$$ROOT"
            }
        }
    }
])

Я получаю массив объектов, который выглядит следующим образом:

[{ _id: "aedrtgt6854earg864", books: { singleBookObject } }, {...}, {...}]

По сути, мне нужно толькоsingleBookObject часть, которая является исходным документом (и что я получу, если сделаю только операцию $match).Есть ли способ избавиться от лишних _id и books частей в конвейере агрегации?

1 Ответ

0 голосов
/ 02 февраля 2019

Вы можете использовать $replaceRoot

Book.aggregate([
  { "$match": generateMLabQuery(rawQuery) },
  { "$sort": { "published_date": -1 }},
  { "$group": {
    "_id": "$book_id",
    "books": { "$first": "$$ROOT" }
  }},
  { "$replaceRoot": { "newRoot": "$books" } }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...