2015-04-20 44 views
2

我想創建一個以1000開始的計數器。Mongodb計數器初始值不爲零

也就是說, UPSERT一個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對於插入,它需要$ 1000設置,但對於一個更新,它需要$ INC 1?

回答

1

你不能在一個原子操作做同一字段多次更新操作,需要發出了兩次更新查詢此:一是檢查是否value場存在使用$exists運營商則使用$inc運營商用於檢查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 
}); 
一個新值