初始值不为零的Mongodb计数器
我想创建一个从1000开始的计数器 即,按如下方式插入mongodb文档初始值不为零的Mongodb计数器,mongodb,upsert,findandmodify,Mongodb,Upsert,Findandmodify,我想创建一个从1000开始的计数器 即,按如下方式插入mongodb文档 如果文档不存在,请使用值1000创建它 如果该文档已存在,则将值增加+1 以下操作不起作用: environment_data:PRIMARY> db.test.findAndModify ({query:{key:"mycounter"}, update:{$inc:{value:1}, $set:{value:1000}}, upsert:true}) Error: findAnd
- 如果文档不存在,请使用值1000创建它
- 如果该文档已存在,则将值增加+1
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,对于insert,它需要$set 1000,但是对于更新,它需要$inc 1?您不能在一个原子操作中对同一字段执行多个更新操作,您需要为此发出两个更新查询:一个使用运算符检查
值
字段是否存在,然后在更新中使用运算符;另一个查询检查值
字段是否不存在,然后将新值设置为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
});