【问题标题】:Required property doesn't work for array of ObjectId type in mongoose必需属性不适用于 mongoose 中的 ObjectId 类型数组
【发布时间】:2020-06-01 22:04:11
【问题描述】:

我有以下猫鼬的架构和模型:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const userSchema = new Schema({
    username: { type: String, required: true, unique: true },
    password: { type: String, required: true },
    email: { type: String, required: true, unique: true },
    first_name: String,
    second_name: String,
    roles: { type: [{ type: Schema.Types.ObjectId, ref: 'Role' }], required: true }
});

userSchema.virtual('fullName').get(function() {
    return `${this.first_name} ${this.second_name}`;
});

module.exports = mongoose.model('User', userSchema);

当我创建一个没有角色字段的对象并将其保存时,我无法让 requiredObjectId 的数组工作并保存它,猫鼬不会抛出错误。我在这里做错了什么?

【问题讨论】:

  • 您可以尝试像这样向角色添加验证吗? validate: v => v == null || v.length > 0here 所述。空数组验证在 mongoose V4 中有效,但在 V5 中发生了变化mongoosejs.com/docs/migrating_to_5.html#array-required
  • 太棒了,谢谢,如果你回答我会接受答案。
  • 好奇 v => v == null || v.length > 0 如果数组长度为 0 则会失败,但如果数组为空也会失败?
  • 返回 false 或抛出错误意味着验证失败。
  • 你能检查我的答案吗?也许该链接中的验证逻辑不是我们想要的。

标签: javascript mongoose


【解决方案1】:

在 mongoose V4 中,阵列所需的工作如您所愿。

但在 V5 中,这种行为一直是 changed

在 mongoose 5 中,所需的验证器仅验证该值是否为 大批。也就是说,它不会像在 猫鼬 4.

但是您可以使用 validate 函数使其工作。返回 false 或抛出错误意味着验证失败。

所以如果你想在数组为空或空时验证失败,你可以使用下面的验证函数。

validate: v !== null && v.length > 0

测试:

const validate = (v) => {
  return v !== null && v.length > 0;
};

const res1 = validate(null);
console.log(res1); // FALSE  => Validation fails

const res2 = validate([]);
console.log(res2); //FALSE  => Validation fails

const res3 = validate([1, 2]);
console.log(res3); //TRUE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多