Mongoose模式要求数组可以为空

FOR*_*RAN 11 arrays validation mongoose required

我有这个架构

var StuffSchema = new mongoose.Schema({
    _id: { type: String, required: true, unique: true },
    name: { type: String, required: true }
});

mongoose.model('Stuff', StuffSchema);
Run Code Online (Sandbox Code Playgroud)

工作良好.

现在我需要添加包含此内容的另一个模式"Cargo"

mystuff: { type:[String], ref: 'Stuff', required:true},
Run Code Online (Sandbox Code Playgroud)

也就是说,我希望mystuff包含Stuff的id数组,但是在运行此代码时,这会因验证错误而失败

mongoose.model('Cargo').create( some data...)
Run Code Online (Sandbox Code Playgroud)

如果我为mystuff字段使用空数组.如果我将Cargo架构更改为,它似乎有效

mystuff: { type:[String], ref: 'Stuff'},
Run Code Online (Sandbox Code Playgroud)

但我希望mystuff字段是必需的并允许空数组

我该怎么做才能实现这一目标?

Zac*_*chB 15

空数组默认创建(另见).该属性required: true要求数组中至少包含一个元素(源代码).您可以删除该属性以获得所需的行为.

(除此之外,_idmongoose为所有模式分配一个ObjectId类型的默认字段.声明它是不必要的,并且使用字符串不是典型的,尽管当然是允许的.)

编辑2017年11月:这是Mongoose 5中的候选更改.请参阅https://github.com/Automattic/mongoose/issues/5139.

  • 正如您所建议的,自 Mongoose 版本 5 以来,默认行为已发生变化。引用 https://mongoosejs.com/docs/migration_to_5.html#array-required :> 在 mongoose 5 中,“required”验证器仅验证该值是否是数组。也就是说,它不会像 mongoose 4 中那样对 _empty_ 数组失败。 (3认同)