MongoDB字段在update语句中以max条件递增

mic*_*man 9 increment mongodb

对于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语句中增加上限(最大)条件.我已经更新了我的例子以明确这一点.

Chr*_*n P 6

您正在寻找findAndModify命令:

db.test.findAndModify({
    query: { _id: 1, i: { $lt: 2 } },
    update: { $inc: { i: 1 } }
})
Run Code Online (Sandbox Code Playgroud)

此查询仅在i不大于最大给定值时才更新文档.

  • 感谢您的回答,您是对的。但是我忘记解释这个问题了,我实际上需要通过查询更新更多字段,因此我不能仅仅从更新中排除任何文档,请参阅我的问题更新。 (2认同)