javascript - Mongodb findOneAndUpdate 函数正在插入新文档

标签 javascript node.js mongodb mongoose

每当我进行更新 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);

Controller

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
                });
            }
        });

最佳答案

mongoose 的

dbModel.findOneAndUpdate() 仅在您的过滤器查询(where claus)未能找到现有文档时插入新文档,即您的集合中不存在匹配的文档。 所以 mongoose 会将新文档插入到集合中。这类似于 update()

upsert:true

引用:Official docs about findOneAndUpdate

关于javascript - Mongodb findOneAndUpdate 函数正在插入新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46387861/

相关文章:

javascript - infobox.prototype = new google.maps.overlayview() 错误,google未定义

javascript - 如何在 JavaScript 中延迟重试异步函数?

Mongodb 使用 groupby 之类的方法限制结果数量

node.js - Visual Studio 调试器未运行现有 Node 项目

mongodb - 将 scala/spark 信息写入 MongoDB

mongodb - 如何使用 MongoDB 聚合框架对嵌套帖子进行分组?

html5-canvas - JavaScript-从函数内部调用函数

javascript - 使用 jQuery 根据输入值为子元素添加类

javascript - JWT 负载中的角色值

javascript - 使用 SSL 运行 vuejs 开发服务器(通过 HTTPS 提供服务)