【问题标题】:Multiply field in array of object by Mongo aggregation pipeline通过 Mongo 聚合管道将对象数组中的字段相乘
【发布时间】:2020-09-05 06:14:56
【问题描述】:

鉴于以下记录:

{
  "_id": "5ebe47995dc5b683d050c396",
  "date": "2020-05-05 00:00:00",
  "insertTime": "2020-05-15 15:41:13.039000",
  "resultSummary": {
    "total": [
      {
        "date": "2019-09-12 00:00:00",
        "actualCost": 123,
      },
      {
        "date": "2019-09-13 00:00:00",
        "actualCost": 456,
      }
    ]
  }
}

我想使用 Mongo 聚合将 actualCost 乘以 100。

预期结果:

{
  "_id": "5ebe47995dc5b683d050c396",
  "date": "2020-05-05 00:00:00",
  "insertTime": "2020-05-15 15:41:13.039000",
  "resultSummary": {
    "total": [
      {
        "date": "2019-09-12 00:00:00",
        "actualCost": 12300,
      },
      {
        "date": "2019-09-13 00:00:00",
        "actualCost": 45600,
      }
    ]
  }
}

我尝试了什么:

{'$set':
     {'resultSummary.total.actualCost': {'$multiply': ['$resultSummary.total.$.actualCost', 100]},
     }
}

但似乎 Mongo 无法识别 $ 并给出

Error: FieldPath field names may not start with '$'

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    由于resultSummary.totalarray,我们不能应用$multiply 运算符。相反,请使用 $map 运算符并单独应用乘法。

    试试这个:

    db.collection.aggregate([
      {
        $addFields: {
          resultSummary: {
            total: {
              $map: {
                input: "$resultSummary.total",
                as: "total",
                in: {
                  "date": "$$total.date",
                  "actualCost": {
                    $multiply: [
                      "$$total.actualCost",
                      100
                    ]
                  }                  
                }
              }
            }
          }
        }
      }
    ])
    

    MongoPlayground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 2020-04-09
      • 1970-01-01
      • 2016-12-27
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      相关资源
      最近更新 更多