对于MongoDB,我正在寻找将增加字段的原子更新,如果该增量将超过最大给定数量,它将统计该最大数量.使用$ inc和$ min运算符的组合可以实现相同的行为,但遗憾的是不能在一次原子更新中.看下面的例子.
示例文档
{
"_id": 1,
"i": 0
}
Run Code Online (Sandbox Code Playgroud)
查询
db.test.update({_id:1}, {$set:{"a":"foo"}, $inc:{i:1}}); db.test.update({_id:1}, {$min:{i:2}});
db.test.update({_id:1}, {$set:{"b":"bar"}, $inc:{i:1}}); db.test.update({_id:1}, {$min:{i:2}});
db.test.update({_id:1}, {$set:{"c":"baz"}, $inc:{i:1}}); db.test.update({_id:1}, {$min:{i:2}});
Run Code Online (Sandbox Code Playgroud)
结果文件
{
"_id": 1,
"i": 2,
"a": "foo",
"b": "bar",
"c": "baz"
}
Run Code Online (Sandbox Code Playgroud)
更新
感谢Christian P的回答,我意识到我忘了再提一个条件.我需要更新文档,因为我需要更新比示例中显示的更多字段.实际上我需要在update语句中增加上限(最大)条件.我已经更新了我的例子以明确这一点.
您正在寻找findAndModify命令:
db.test.findAndModify({
query: { _id: 1, i: { $lt: 2 } },
update: { $inc: { i: 1 } }
})
Run Code Online (Sandbox Code Playgroud)
此查询仅在i不大于最大给定值时才更新文档.