将对象推送到包含父文档值的 mongoDB 对象数组中

Push object in mongoDB array of objects which contains value from parent document

所以我有一个 mongodb 文档

{
  "id": 1,
  "balance": 10,
  "transactions": [
    {
      "balance": 10,
      "transaction_amount": 10
    }
  ]
}

我想在 transactions 数组中添加另一个对象,该对象使用以前的余额并添加较新的值。 例如交易金额为20 文档应该以这种方式更新

{
  "id": 1,
  "balance": 30,
  "transactions": [
    {
      "balance": 10,
      "transaction_amount": 10
    },
    {
      "balance": 30,
      "transaction_amount": 20
    }
  ]
}

现在,如果我想在 transactions 数组中再添加一个文档,transaction_amount 作为 5,结果文档将变为

{
  "id": 1,
  "balance": 35,
  "transactions": [
    {
      "balance": 10,
      "transaction_amount": 10
    },
    {
      "balance": 30,
      "transaction_amount": 20
    },
    {
      "balance": 35,
      "transaction_amount": 5
    }
  ]
}

有没有办法使用聚合管道来做到这一点

只需使用 $add$concatArrays 来处理数据

db.collection.update({
  id: 1
},
[
  {
    "$addFields": {
      "txnAmt": <amount you want>
    }
  },
  {
    $addFields: {
      balance: {
        $add: [
          "$balance",
          "$txnAmt"
        ]
      }
    }
  },
  {
    "$addFields": {
      "transactions": {
        "$concatArrays": [
          "$transactions",
          [
            {
              balance: "$balance",
              transaction_amount: "$txnAmt"
            }
          ]
        ]
      }
    }
  },
  {
    "$unset": "txnAmt"
  }
],
{
  multi: true
})

这里是Mongo playground供大家参考。