首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

hasOwnProperty在Mongoose的pre validate中不起作用

在Mongoose的pre validate中,hasOwnProperty方法不起作用的原因是Mongoose的pre validate钩子函数中的this指向的是当前文档实例,而不是普通的JavaScript对象。因此,无法直接使用hasOwnProperty方法来判断属性是否存在。

解决这个问题的方法是使用Mongoose提供的isModified方法来判断属性是否被修改。isModified方法可以检测文档实例中的属性是否被修改过,如果被修改过则返回true,否则返回false。

下面是一个示例代码,演示了如何在Mongoose的pre validate中判断属性是否存在:

代码语言:txt
复制
const mongoose = require('mongoose');

const schema = new mongoose.Schema({
  name: String,
  age: Number
});

schema.pre('validate', function(next) {
  if (this.isModified('name')) {
    console.log('name属性被修改过');
  } else {
    console.log('name属性未被修改过');
  }
  next();
});

const Model = mongoose.model('Model', schema);

const doc = new Model({ name: 'John', age: 25 });
doc.name = 'Tom';
doc.validate();

在上述代码中,我们定义了一个Mongoose模型,并在pre validate钩子函数中使用isModified方法判断name属性是否被修改过。如果name属性被修改过,则输出"name属性被修改过",否则输出"name属性未被修改过"。

需要注意的是,isModified方法只能在Mongoose的钩子函数中使用,不能在普通的JavaScript代码中使用。

推荐的腾讯云相关产品:腾讯云云数据库MongoDB,提供高性能、可扩展的MongoDB数据库服务,适用于各种规模的应用场景。

产品介绍链接地址:https://cloud.tencent.com/product/cdb_mongodb

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Mongoose学习参考文档

Schema——纯洁数据库原型 1.1 什么是Schema 我理解Schema仅仅只是一断代码,他书写完成后程序依然无法使用,更无法通往数据库端 他仅仅只是数据库模型程序片段一种表现,或者是数据属性模型...1.4 Schema.Types NodeJS基本数据类型都属于Schema.Type,另外Mongoose还定义了自己类型 //举例: var ExampleSchema =...如果子文档更新时出现错误,将直接报父类文档,可以这样处理: ChildrenSchema.pre('save',function(next){ if('x' === this.name...,不是什么数据都能往数据库里丢或者显示到客户端,数据验证需要记住以下规则: 验证始终定义SchemaType 验证是一个内部中间件 验证是一个Document被保存时默认启用,除非你关闭验证...属性 8.Middleware中间件 8.1 什么是中间件   中间件是一种控制函数,类似插件,能控制流程init、validate、save、remove`方法 8.2 中间件分类   中间件分为两类

24.2K90
  • 前端如何快速为App搭建数据服务

    body,接着我们router.js增加router.get('/', controller.home.index);就可以启动服务后浏览器访问IP:PORD得到3号标题内容了。...// server\config\plugin.js exports.mongoose = { enable: true, package: 'egg-mongoose', }; exports.validate...属性得到请求用户名和密码; 通过用户名MongoDB查找用户,成功找到说明用户名正常; 通过将密码进行md5加密与存储密码比对,成功则说明密码正常; 使用jwt将用户名写入并生成token,存储到...token即可; 我们通过将接收到token进行Mongo查询,成功查询说明Token正常; 通过验证token正确性得到被写入用户名; 我们通过用户名查询Mongo对应详细信息,成功查询后相应前端接口数据...中用户基本操作(登录,信息获取,登出)功能,当然实际业务中将更为复杂。

    1.3K30

    ​eggjs实战

    本文主要内容- 文档生成工具:基于插件swagger-doc接口定义- 统一异常处理- 基于扩展helper响应统一处理- validate接口格式检查- 三层结构 初步 安装 推荐直接使用脚手架,...它作用在于我们可以将一些常用动作抽离 helper.js 里面成为一个独立函数,这样可以用 JavaScript 来写复杂逻辑,避免逻辑分散各处。...应用开发,我们可能经常要自定义一些 helper 方法,例如上面例子 formatUser,我们可以通过框架扩展形式来自定义 helper 方法。 在这里我们定义了两个方法。...}}) return mongoose.model('User', UserSchema)} service 先安装哈希依赖: npm install egg-bcrypt -s 插件定义:...框架提供了统一入口文件( app.js)进行启动过程自定义,这个文件返回一个 Boot 类,我们可以通过定义 Boot 类生命周期方法来执行启动应用过程初始化工作。

    3K20

    MongoDB增删改查操作

    调用实例对象下save方法将数据保存到数据库。...1.3 mongoDB数据库导入数据 找到mongodb数据库安装目录,将安装目录下bin目录放置环境变量。...mongoose验证 创建集合规则时,可以设置当前字段验证规则,验证失败就则输入插入失败。...1.7 集合关联 通常不同集合数据之间是有关系,例如文章信息和用户信息存储不同集合,但文章是某个用户发表,要查询文章所有信息包括发表用户,就需要用到集合关联。...连接数据库,创建用户集合,向集合插入文档 当用户访问/list时,将所有用户信息查询出来 实现路由功能 呈现用户列表页面 从数据库查询用户信息 将用户信息展示列表

    19.9K30

    谈谈项目的重构与测试

    作一次validate操作,再进入业务逻辑层。...mongodb,flask框架采用了mongoengine作为数据库层orm,对于这个python-mongodborm产品,我个人并不是很喜欢(可能是因为我习惯了mongoose工作方式),...比如说测试代码import了项目中某个函数去获取一些数据,用于检查某个component更新操作是否成功。重构过程,该函数被重构成了协程。...异步测试&同步测试 tornado,也提供了一套测试功能,具体tornado.testing这个模块,看它源码其实可以发现它也是基于unittest一层封装。...具体使用只需要继承tornado提供AsyncTestCase类就行了,注意这里不是unittest.TestCase。看了源码也可以发现,前者就是继承自后者

    1.2K10

    【实践】2.如何使用Postman做多接口测试

    下图"username" 和"passwd" value值应用了环境变量"user_pwd",所以body ,只需key对应value那写上变量{{username}}, {{passwd}}...2.3 Pre-requestScript 使用 对于环境变量和全局变量使用,除了上面所讲方法外,也可以用Pre-requestScript 方法。...以login接口为例,"Pre-requestScript"设置环境变量 "username", "passwd",Body 中选取"form-data"** 格式,输入所需key-value,...login 请求"Tests"中加入 var jsonData =JSON.parse(responseBody);//获取body返回所有参数 postman.setEnvironmentVariable...Postman 使用时候要将Interceptor 打开,如下图所示,红框图标要高亮,这样发送Cookie 请求时就不会出现上面提到提示信息了。

    2.3K30

    深入理解JavaScript系列(33):设计模式之策略模式

    在理解策略模式之前,我们先来一个例子,一般情况下,如果我们要做数据合法性验证,很多时候都是按照swith语句来判断,但是这就带来几个问题,首先如果增加需求的话,我们还要再次修改这段代码以增加逻辑,而且进行单元测试时候也会越来越复杂...("123", "isNonEmpty")); 复制代码 那如何来避免上述代码问题呢,根据策略模式,我们可以将相同工作代码单独封装成不同类,然后通过统一策略处理类来处理,OK,我们先来定义策略处理类...: [], // 当然需要使用验证类型 config: {}, // 暴露公开验证方法 // 传入参数是 key => value对 validate:...; // 清空所有的错误信息 this.messages = []; for (i in data) { if (data.hasOwnProperty...实践,不仅可以封装算法,也可以用来封装几乎任何类型规则,是要在分析过程需要在不同时间应用不同业务规则,就可以考虑是要策略模式来处理各种变化。

    32430
    领券