我想创建一个从1000开始的计数器。
即。如下挂载mongodb文档
以下不起作用:
environment_data:PRIMARY> db.test.findAndModify
({query:{key:"mycounter"},
update:{$inc:{value:1}, $set:{value:1000}},
upsert:true})
Error: findAndModifyFailed failed: {
"errmsg" : "exception: Cannot update 'value' and 'value' at the same time",
"code" : 16836,
"ok" : 0
}
有没有办法告诉upsert,对于一个插入,它需要$设置1000,但是对于更新,它需要$ inc 1?
答案 0 :(得分:2)
您无法在一个原子操作中对同一字段执行多个更新操作,您需要为此发出两个更新查询:一个使用{{3来检查value
字段是否存在然后运算符在更新中使用$exists
运算符,另一个查询检查value
字段不存在,然后设置新值1000。
db.test.findAndModify({
query: { key: "mycounter", value: { $exists: true, $ne : null } },
update: { $inc: { value: 1 } },
upsert: true
});
和
db.test.findAndModify({
query: { key: "mycounter", value: { $exists: false } },
update: { $set: { value: 1000 } },
upsert: true
});