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

时间:2014-06-18 08:03:17

标签: mongodb increment

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

1 个答案:

答案 0 :(得分:5)

您正在寻找findAndModify命令:

db.test.findAndModify({
    query: { _id: 1, i: { $lt: 2 } },
    update: { $inc: { i: 1 } }
})

仅当i不大于您的最大给定值时,此查询才会更新文档。