复杂的 Mongodb 聚合,向当前文档添加新的计算字段

问题描述 投票:0回答:1

我想通过计算得到一些值。

样本文件:

{
    "_id": ObjectId("5407c76b7b1c276c74f90524"),
    "field": "x",
    "values": 1
}{
    "_id": ObjectId("5407c76b7b1c276c74f90525"),
    "field": "x",
    "values": 1
}{
    "_id": ObjectId("5407c76b7b1c276c74f90526"),
    "field": "z",
    "values": 1
}{
    "_id": ObjectId("5407c76b7b1c276c74f90527"),
    "field": "x",
    "values": 1
}{
    "_id": ObjectId("5407c76b7b1c276c74f90528"),
    "field": "z",
    "values": 1
}{
    "_id": ObjectId("5407c76b7b1c276c74f90529"),
    "field": "y",
    "values": 1
}

预期结果:

{
    "_id": ObjectId("5407c76b7b1c276c74f90524"),
    "field": "x",
    "values": 1,
    "sum": 6
}{
    "_id": ObjectId("5407c76b7b1c276c74f90525"),
    "field": "x",
    "values": 1,
    "sum": 6
}{
    "_id": ObjectId("5407c76b7b1c276c74f90526"),
    "field": "z",
    "values": 1,
    "sum": 6
}{
    "_id": ObjectId("5407c76b7b1c276c74f90527"),
    "field": "x",
    "values": 1,
    "sum": 6
}{
    "_id": ObjectId("5407c76b7b1c276c74f90528"),
    "field": "z",
    "values": 1,
    "sum": 6
}{
    "_id": ObjectId("5407c76b7b1c276c74f90529"),
    "field": "y",
    "values": 1,
    "sum": 6
}

我想计算所有“值”字段的总和,并将此值作为“总和”字段添加到所有文档中。我该怎么做 ?我尝试了 $group 操作,使用 $group 操作,我只得到一个文件。

我正在尝试获取所有具有计算值的文档。

mongodb mongodb-query aggregation-framework mongo-shell
1个回答
0
投票

需要使用$setWindowFields stage.

db.collection.aggregate([
  {
    $setWindowFields: {
      output: {
        "sum": {
          $sum: "$values",
          "window": {
            "documents": ["unbounded","unbounded"]
          }
        }
      }
    }
  }
])

演示

© www.soinside.com 2019 - 2024. All rights reserved.