初始值不为零的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开始的计数器

即,按如下方式插入mongodb文档

  • 如果文档不存在,请使用值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
});