我想測試是否更新的「upsert」選項是好的。所以我用相同的鍵「插入」一個對象到MongoDB中兩次。但它沒有顯示插入的消息。我錯過了什麼嗎?貓鼬確定update-upsert正在插入或更新
(MongoDB的:V2.6.3;貓鼬:3.8.15)
Member.findOneAndRemove({user_id : 1},
function (err, doc) {
if (!err) onsole.log(doc ? 'deleted' : 'not found');
}); // -> deleted, make sure user_id = 1 doesn't exist
Member.update({user_id : 1},
{$set : {name:"name1"}},
{upsert : true, new : false}, // new : false, so that I can detect original doc is null then know it's a new one.
function (err, doc) {
if (!err) {
console.log(doc ? 'updated' : 'inserted')
}
}); // -> updated ? But it shoule be inserted, right ?
Member.update({user_id : 1},
{$set : {name:"name2"}},
{upsert : true, new : false},
function (err, doc) {
if (!err) {
console.log(doc ? 'updated' : 'inserted')
}
}); // -> updated, yes, no problem.
謝謝你的任何暗示。
============答案=============
使用.findOneAndUpdate代替.update! 此外,請確保選項是{upsert:true,new:false}, 以便回調的第二個參數(doc)可以是原始文檔。
我剛剛完成測試.findOneAndUpdate和是的,它顯示了我想要什麼,你提到了什麼。我仍然可以使用.update()來實現相同的目標。但是.findOneAndUpdate是這種情況下最好和最簡單的方法。非常感激。 – Kevin 2014-11-03 06:41:19
@Kevin'.findOneAndUpdate()'實際上並沒有告訴你是否有「插入」的內容。尤其是使用「新」選項集(這是貓鼬的默認選項)。你只能通過'「new」來判斷:false,並從那裏開始向後工作。 – 2014-11-03 06:47:17
我應該說使用選項{upsert:ture,new:false}使用.findOneAndUpdate()。只是一個.findOneAndUpdate()調用仍然會讓答案混淆。感謝提醒! – Kevin 2014-11-03 07:09:34