簡體   English   中英

Mongoose findOneAndUpdate和upsert返回沒有錯誤,沒有文檔受到影響

[英]Mongoose findOneAndUpdate and upsert returns no errs, no documents affected

我有一個非常小的模型:

var CompanySchema = new mongoose.Schema({
    name: { type: String, required: true, unique: true },
});

var Company = mongoose.model('Company', CompanySchema)

我試圖添加單個文檔,如果它不存在。 目前,我測試時沒有文件:

models.Company.findOneAndUpdate({
    name: 'companyName'
}, {upsert: true}, function(err, numberAffected, raw){
    console.log(err, numberAffected, raw)
})

這是使用Mongoose文檔中upsert選項

但是, errnullnumberAffected為null。 為什么我的文件沒有更新?

從Mongoose 4+開始,不要忘記設置new:true和upsert,否則您將獲得舊文檔作為返回值,而不是更新的值。

這非常棘手,特別是當請求創建文檔時,就像您沒有指定new:true,您收到一個空文檔(沒有現有文檔),但沒有錯誤。

    var myObj = ...;
    collection.findOneAndUpdate(
    {uniqueAttr: myObj.uniqueAttr},
    myObj,
    {upsert: true, new: true},
    function(...) {...}

在您的代碼中,您正在使用方法findOneAndUpdate的3參數版本,因此,根據您發布的文檔,參數為: A.findOneAndUpdate(conditions, update, callback)

您應該使用方法的第4個參數版本來指定upsert選項。

我想指出我從來沒有使用過框架貓鼬。 希望這可以幫助。

編輯:是的,在您的情況下, conditionsupdate是相同的。 如果您的對象比示例中顯示的對象更復雜,您可能需要檢查_id或“唯一”(MongoDB不保證)屬性(如果它上面有索引,則更好)。 例如:

var myObj = ...;
collection.findOneAndUpdate({uniqueAttr: myObj.uniqueAttr}, myObj, {upsert: true}, function(){
     ...
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM