Mongoose 验证错误:架构配置无效

Posted

技术标签:

【中文标题】Mongoose 验证错误:架构配置无效【英文标题】:Mongoose validation err: Invalid schema configuration 【发布时间】:2019-10-14 18:08:24 【问题描述】:

尝试通过嵌入文档来建模集合之间的关系 但是在架构中进行验证并将“必需”设置为 True 时,出现错误

一旦我在电影模式中注释了所需的流派对象,问题就解决了 但我想要验证

const Movie = mongoose.model(
  'Movies',
  new mongoose.Schema(
    title: 
      type: String,
      required: true,
      trim: true,
      minlength: 1,
      maxlength: 255
    ,
    numberInStock: 
      type: Number,
      required: true,
      min: 0,
      max: 255
    ,
    dailyRentalRate: 
      type: Number,
      required: true,
      min: 0,
      max: 255
    ,
    genre: genreSchema
    required: true
  )
);

const genreSchema = new mongoose.Schema(
  name: 
    type: String,
    required: true,
    minlength: 5,
    maxlength: 50
  
);

TypeError:无效的架构配置:True 不是路径 required 处的有效类型

【问题讨论】:

required: true 看起来像一个字段,但这就是您收到无效架构配置错误的原因。 【参考方案1】:

删除required: true 并从官方docs 关注这个。注意使用的猫鼬版本。 我得到了同样的错误并解决了它。我的错误是使子文档成为模型而不是将其保留为模式

const childSchema = new Schema( name: 'string' );

const parentSchema = new Schema(
  // Array of subdocuments
  children: [childSchema],
  // Single nested subdocuments. Caveat: single nested subdocs only work
  // in mongoose >= 4.2.0
  child: childSchema
);

【讨论】:

【参考方案2】:

将流派模型导出为 exports.genreSchema = genreSchema

然后在movies.js文件中导入模型为 import genreSchema from './genre.model'

尝试这样做不会出现错误。

【讨论】:

【参考方案3】:

您可以使用 references 并在获取时使用 populate

genre: [
        type: mongoose.Schema.Types.ObjectId,
        ref: 'genreSchema',
        required: true
    ],

参考:Model Referenced one to Many Relationship between documents 更好的架构设计

【讨论】:

@Omid 然后你应该写一个逻辑来验证它。我不认为您可以根据需要制作嵌入式文档。如果你去参考,那么它是可能的 我不认为它有效,但试试看genre: genreSchema: genreSchema, required: true 是的,我同意。您可以在获取时使用引用并使用填充【参考方案4】:

请分享完整代码。

可能主要原因是你没用过

const Movie = mongoose.model(
  'Movies',
  new mongoose.Schema(
    title: 
      type: String,
      required: true,
      trim: true,
      minlength: 1,
      maxlength: 255
    ,
    numberInStock: 
      type: Number,
      required: true,
      min: 0,
      max: 255
    ,
    dailyRentalRate: 
      type: Number,
      required: true,
      min: 0,
      max: 255
    ,
    genre: 
        ref: 'SchemaName',
        required: true
    ,
  )
);

你可以这样做。

【讨论】:

【参考方案5】:

尝试在 true 旁边给出消息。 例如--> 必填:[true, "Title required"]

【讨论】:

以上是关于Mongoose 验证错误:架构配置无效的主要内容,如果未能解决你的问题,请参考以下文章

Mongo (+Mongoose) 错误:无法找到 $geoNear 查询的索引

Mongo使用护照身份验证创建用户错误

在节点应用程序上使用 mongoose 的远程 mongo 身份验证问题

在节点应用程序上使用 mongoose 的远程 mongo 身份验证问题

Mongoose 不尊重模式并插入错误的数据类型

无法使用带有 X509 用户的 mongoose 连接到 Mongo DB