[英]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
選項
但是, err
為null
, numberAffected
為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選項。
我想指出我從來沒有使用過框架貓鼬。 希望這可以幫助。
編輯:是的,在您的情況下, conditions
和update
是相同的。 如果您的對象比示例中顯示的對象更復雜,您可能需要檢查_id或“唯一”(MongoDB不保證)屬性(如果它上面有索引,則更好)。 例如:
var myObj = ...;
collection.findOneAndUpdate({uniqueAttr: myObj.uniqueAttr}, myObj, {upsert: true}, function(){
...
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.