zoukankan      html  css  js  c++  java
  • mongoose 更新数据时不验证数据(忽略设定的集合规则)的问题

    问题:

    mongoose 更新数据时不验证数据(忽略设定的集合规则)的问题

     

    参考:

     http://www.mongoosejs.net/docs/api.html#updateone_updateOne

    https://mongoosejs.com/docs/validation.html#update-validators

    https://segmentfault.com/q/1010000014305255

    https://zhuanlan.zhihu.com/p/40122939

    Mongoose也支持对update(),updateOne(),updateMany()和findOneAndUpdate()操作的验证。

    默认情况下,更新验证器处于关闭状态-您需要指定runValidators选项。

    注意:更新验证器默认情况下处于关闭状态,因为它们有一些注意事项。(至于是什么注意事项,官方文档没写啊)

    // 官方示例:
    var toySchema = new Schema({
      color: String,
      name: String
    });
    
    var Toy = db.model('Toys', toySchema);
    
    Toy.schema.path('color').validate(function (value) {
      return /red|green|blue/i.test(value);
    }, 'Invalid color');
    
    var opts = { runValidators: true };
    Toy.updateOne({}, { color: 'not a color' }, opts, function (err) {
      assert.equal(err.errors.color.message,
        'Invalid color');
    });

     

    model.update(conditions, doc, option, function (err, res){})
    // conditions-查询条件 doc-需要更新的数据
    // *** 其中res返回  {n:2, nModified:2, ok: 1} ***
    // *** n为匹配到的条数 nModified修改的条数 ok 表为是否成功 ***
    const option = { // option选项及其默认值
        safe: true, // 安全模式
        upsert: false, //如果不存在则创建新纪录
        multi: false,  // 是否更新多个查询记录
        runValidators: null, // 如果值为true,执行Validation验证。
        setDefaultsOnInsert: null, // 如果upsert选项为true,在新建时插入文档定义的默认值。
        strict: null, // 用严格模式跟新
        overwrite: false // 禁用update-only模式,允许覆盖记录。
    }

     

    解决方案:

    调用Model.updateOne(conditions, doc, [options], [callback]) 方法时,添加 options 属性 runValidators: true

    try {
        // 修改数据库中的值
        // 不验证集合规则
        // await Article.updateOne({ _id }, article);
        // 验证集合规则
        await Article.updateOne({ _id }, article, { runValidators: true });
    } catch (error) {
        res.send(error);
    }

     

     

     

  • 相关阅读:
    oracle表分区管理partition
    winfrom 界面编辑之疑难杂症
    resx文件引用
    mysql 数据库名含“-”
    KNN算法之图像处理二
    KNN算法之图像处理一
    DCOM初步窥探二
    dcom初步窥探一
    .net组件和com组件&托管代码和非托管代码
    c# apache服务器请求得到数据(初级)
  • 原文地址:https://www.cnblogs.com/jeacy/p/13603838.html
Copyright © 2011-2022 走看看