【问题标题】:Return original documents only from mongoose group/aggregation operation仅从 mongoose 组/聚合操作返回原始文档
【发布时间】:2019-06-26 14:19:27
【问题描述】:

我对一堆文档(书籍)进行了过滤+分组操作。分组是只返回共享相同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 部分?

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    您可以使用$replaceRoot

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-18
      • 2012-06-08
      • 2021-06-01
      • 2014-01-29
      • 2019-04-28
      • 1970-01-01
      • 2020-10-10
      • 2016-02-17
      相关资源
      最近更新 更多