首页 文章

Mongoose:如何使用聚合结果设置模型的字段

提问于
浏览
0

这是我的样本:

两个简单的Mongoose模型:

  • a注释模型,其中包含一个id字段,它是Notebook模型的参考 .

  • 一个笔记本型号,带有我上面提到的ID .

我的目标是输出类似的东西:

[
  {
    "notes_count": 7,
    "title": "first notebook",
    "id": "5585a9ffc9506e64192858c1"
  },
  {
    "notes_count": 3,
    "title": "second notebook",
    "id": "558ab637cab9a2b01dae9a97"
  }
]

在Note模型上使用聚合和填充,如下所示:

Note.aggregate(
    [{
        "$group": {
            "_id": "$notebook",
            "notes_count": {
                "$sum": 1
            }
        }
    }, {
        "$project": {
            "notebook": "$_id",
            "notes_count": "$notes_count",
        }
    }]

给了我这样的结果:

{
  "_id": "5585a9ffc9506e64192858c1",
  "notes_count": 7,
  "notebook": {
    "_id": "5585a9ffc9506e64192858c1",
    "title": "un carnet court",
    "__v": 0
  }
}

忘记__v和_id字段,使用修改后的toJSON函数很容易处理 .

但是在这个函数中,doc和ret params都不允许我访问计算的notes_count值 .

显然,我可以在路由处理程序中管理它(解析结果并重新创建将返回的数据)但是,有没有一种正确的方法来使用mongoose?

1 回答

  • 1

    您无法使用聚合方法进行更新 . 如您所知,您需要使用聚合构造函数的输出来更新相关文档 .

    由于Mongoose聚合方法将返回普通对象的集合,您可以遍历此方法并使用 _id 字段(或类似方法)来更新文档 .

相关问题