【发布时间】:2018-10-10 03:57:17
【问题描述】:
我正在尝试通过插入一个未包含在某些必填字段中的对象来测试 Mongoose 模式。
是这样的:
let schema = {
_supplier: {
type: Schema.Types.ObjectId,
required: true
},
permissions: {
type: [
{
level: {
type: Number,
min: 1,
max: 9,
required: true
},
title: {
type: String,
minlength: 0,
maxlength: 16
},
modules: [String]
}
],
validate: [permissionsLimit, '${PATH} exceeds the limit of 9'],
required: true
}
};
function permissionsLimit(v) {
return v.length<=9;
}
let permissionsTestSchema = new Schema(schema);
let PermissionsTest = mongoose.model("permissionsTestSchema", permissionsTestSchema);
let permissionTest = new PermissionsTest({
_supplier: mongoose.Types.ObjectId()
});
permissionTest.save(err => {
if (err) return cast.error(err);
return cast.ok();
});
如您所见,我创建了一个仅包含 _supplier 键的实例 - 我没有添加 permissions 数组 - 这是必需的。
Mongoose 不会收到错误,而是应用操作并将permissions 的空白数组插入到 MongoDB 中的集合中。
这不是我需要的行为。 我不想要集合中缺少详细信息的文档。
如果用户没有为他的值提供permissions数组,我根本不接受查询。
为什么 Mongoose 会忽略架构中的必填字段?
【问题讨论】:
标签: node.js mongodb mongoose objectid