Mongoose:如何使用agregation

时间:2015-07-02 15:25:09

标签: node.js mongodb mongoose

这是我的样本:

两个简单的Mongoose模型:

  • 一个Note模型,其中包括一个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 个答案:

答案 0 :(得分:1)

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

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