将对象推送到包含父文档值的 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供大家参考。
所以我有一个 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供大家参考。