Ale*_*hin 6 mongodb mongodb-query
我想在 MongoDB 中实现类似于doc.value = max(doc.value - amount, 0). 我可以通过获取文档、更新其值然后保存它来做到这一点,但是是否可以使用原子操作来避免并行递减的同步问题?
事实上,可以通过单个操作来实现。您所需要的只是更新运算符内的聚合管道。
假设您有一个如下所示的文档:
{
"key": 1,
value: 30
}
Run Code Online (Sandbox Code Playgroud)
您想要从中减去 x,value如果结果值小于零,则设置value为 0,否则将其设置为value- x 的值。这是您需要的更新聚合器。在此示例中,我从 中减去 20 value。
db.collection.update({
key: 1
},
[
{
$set: {
"value": {
$cond: [
{
$gt: [
{
$subtract: [
"$value",
20
]
},
0
]
},
{
$subtract: [
"$value",
20
]
},
0
]
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
结果将是:
{
"key": 1,
"value": 10
}
Run Code Online (Sandbox Code Playgroud)
但如果将 20 更改为 44,结果是:
{
"key": 1,
"value": 0
}
Run Code Online (Sandbox Code Playgroud)
这是一个适合您的游乐场:https ://mongoplayground.net/p/Y9yO6v9Oca8
| 归档时间: |
|
| 查看次数: |
1673 次 |
| 最近记录: |