仅从猫鼬组/聚集操作中返回原始文档

时间:2019-02-02 01:14:21

标签: mongodb mongoose mongodb-query aggregation-framework

我对一堆文件(书)进行了筛选+分组操作。分组仅返回共享相同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操作所得到的内容)。有没有办法消除聚合管道中的冗余_idbooks部分?

1 个答案:

答案 0 :(得分:1)

您可以使用$replaceRoot

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