具有一些必需属性的 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 混合模式的主要内容,如果未能解决你的问题,请参考以下文章

chrome中的Chrome css3混合混合模式错误

猫鼬混合模式不起作用

两个元素上的 CSS 背景混合模式

使用模块模式时的 Javascript 混合

JS面向对象基础讲解(工厂模式构造函数模式原型模式混合模式动态原型模式)

JS面向对象基础讲解(工厂模式构造函数模式原型模式混合模式动态原型模式)