![](/img/trans.png)
[英]Mongodb findOneAndUpdate - check if new document added, or just updated
[英]Mongodb findOneAndUpdate function is inserting new document
每當我進行更新 api 調用時,我只需要更新 serviceActiveFlag 狀態。更新 api 調用后,我可以看到創建了一個空車輛數組的新文檔,如下所示。
_id:59c76073c11d3929148f500f
vehicle:Array
_v:0
id 字段將在每次 put api 調用時覆蓋。
有人可以幫我解決這個問題嗎?
模式
var localTransportSchema = new Schema({
name: { type: String, required: false, trim: true },
contact: {
addressLine1: { type: String, required: false },
serviceActiveFlag: { type: String, required: false, enum: ['Y', 'N'] },
},
vehicle: [{
vehicleType:{ type: String, required: false, enum: ['sedan', 'hatchback', 'suv', 'mpv', 'luxury'] },
}]
});
module.exports.accomodationModel = mongoose.model(collection, localTransportSchema);
控制器
var updates = {
$set: {
"contact.addressLine1": req.body['addressLine1'],
"contact.serviceActiveFlag": req.body['serviceActiveFlag']
}
};
transportModel.findOneAndUpdate({ "name": req.body['providerName']},
updates, { returnOriginal: false, upsert: false }, function (err, doc) {
if (err) {
logger.error("Error while updating record : - " + err.message);
return res.status(409).json({
"Message": "Error while updating transport details for provider " + req.body['providerName'] + " in transport details table"
});
} else if (doc === null) {
logger.error("Error while updating record in transport details : - unable to update database");
return res.status(409).json({
"Message": "Error while updating transport details for provider " + req.body['providerName'] + " due to " + err.message
});
}
});
dbModel.findOneAndUpdate()
of dbModel.findOneAndUpdate()
僅當您的過濾器查詢(where claus)未能找到現有文檔時才插入新文檔,即您的集合中不存在匹配的文檔。 所以貓鼬會將新文檔插入到集合中。 這類似於upsert:true
of update()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.