node.js - 使用 2 个字段的 Mongoose 自定义验证

我想使用 mongoose 自定义验证来验证 endDate 是否大于 startDate。如何访问 startDate 值?使用this.startDate时,不起作用;我不确定。

var a = new Schema({
  startDate: Date,
  endDate: Date
});

var A = mongoose.model('A', a);

A.schema.path('endDate').validate(function (value) {
  return diff(this.startDate, value) >= 0;
}, 'End Date must be greater than Start Date');

diff 是一个比较两个日期的函数。

最佳答案

您可以使用 Mongoose 'validate' middleware 来做到这一点这样您就可以访问所有字段:

ASchema.pre('validate', function(next) {
    if (this.startDate > this.endDate) {
        next(new Error('End Date must be greater than Start Date'));
    } else {
        next();
    }
});

请注意,在调用 next 以报告验证失败时,您必须将验证错误消息包装在 JavaScript Error 对象中。

https://stackoverflow.com/questions/23760253/

相关文章:

linux - Errr 'mongo.js:L112 Error: couldn' t 连接到服务

java - 如何通过Java在MongoDB中一次插入多个文档

mongodb - 如何使用 Robomongo 连接到 MongoDB Atlas?

java - 如何使用 Java mongodb 驱动程序中的 "_id"字段查询文档?

python - pymongo 中的快速或批量更新

node.js - 使用 mongoose 在 mongodb 中设置集合的到期时间

mongodb - 如何在 MongoDB 中创建嵌套索引?

mongodb - 如何使用 Meteor Upsert

mongodb - Mongoose 是否支持 Mongodb `findAndModify` 方法

mongodb - 我控制修补程序上的 Mongo 错误