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