runValidator 属性无法在 mongodb 上使用 mongoose 进行 upsert

Posted

技术标签:

【中文标题】runValidator 属性无法在 mongodb 上使用 mongoose 进行 upsert【英文标题】:runValidator property not working on upsert on mongodb with mongoose 【发布时间】:2020-08-02 12:22:34 【问题描述】:

我的模型有一个验证器函数,用于检查 ForeignKey。

下面是我的 locationId 属性的模型代码。

locationId: 
            type: mongoose.SchemaTypes.ObjectId,
            required: true,
            validate: 
                isAsync: true,
                validator: function(v) 
                    return FKHelper(mongoose.model('Account_LocationMapping'), v);
                ,
                message: `LocationId doesn't exist`
            
          

FK 助手

module.exports = (model, id) => 
    return new Promise((resolve, reject) => 
        model.findOne( _id: id , (err, result) => 
            if (result) 
                return resolve(true);
             else
                return reject(
                    new Error(`FK Constraint 'checkObjectsExists' for '$id.toString()' failed`)
                );
        );
    );
;

我的 upsert 查询:

 updateOne: 
               filter: 
                         accountId: req.account
                       ,
               update: 
                         $set:  locationId: req.location ,
                         //runValidator:true -> tried setting the validator property inside update.
                       ,
               upsert: true,
               runValidators: true
            

我尝试设置 runValidator:true 的两种方式都不起作用。

【问题讨论】:

【参考方案1】:

我相信问题就在这里:When using update validators, required validators only fail when you try to explicitly $unset the key.

来自文档:https://mongoosejs.com/docs/validation.html#update-validators-only-run-on-updated-paths

【讨论】:

以上是关于runValidator 属性无法在 mongodb 上使用 mongoose 进行 upsert的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬 findOneAndUpdate 和 runValidators 不工作

Ubuntu下,解决mongod服务无法启动的问题

无法运行mongod:致命断言28562

Mongo mongod init.d 脚本无法在 CentOS 上运行

win10 无法启动 mongod

mongodb 不会启动 mongod -> 错误 dbpath 不存在,但路径确实退出