具有一些必需属性的 Mongoose 混合模式
Posted
技术标签:
【中文标题】具有一些必需属性的 Mongoose 混合模式【英文标题】:Mongoose mixed schema with some required properties 【发布时间】:2019-08-12 19:27:02 【问题描述】:我正在尝试定义一个 mongoose 模式,其中我有一个混合类型,但想要在仍然允许任何东西的同时创建一些必需的属性。这个活动可以吗?
new Schema(
myProperty:
name:
type: String,
required: true,
<anything else>
)
我发现的唯一伪解决方案是定义可以混合类型的属性级别,但我想避免它:
new Schema(
myProperty:
name:
type: String,
required: true,
additionalData: Object,
)
【问题讨论】:
【参考方案1】:您可以使用验证器进行混合:
您的架构将是:
const UserSchema = new Schema(
myProperty:
type: mongoose.Schema.Types.Mixed
)
还有你的验证者:
UserSchema.path('myProperty').validate(function (value)
return value && value.name !== undefined && typeof value.name === "string";
, 'name is a required string');
然后,如果您尝试使用:
const User = mongoose.model('User', UserSchema);
let u = new User( myProperty: name: "bar" )
console.log(u.validateSync())
// undefined => validation passed
u = new User( myProperty: foo: "bar" )
console.log(u.validateSync())
// ValidationError: User validation failed: myProperty: name is a required string
【讨论】:
【参考方案2】:您正在寻找“严格”架构选项。
new Schema(
myProperty:
name:
type: String,
required: true,
,
strict: false);
见:https://mongoosejs.com/docs/guide.html#strict
【讨论】:
以上是关于具有一些必需属性的 Mongoose 混合模式的主要内容,如果未能解决你的问题,请参考以下文章