【问题标题】:Mongoose validation err: Invalid schema configurationMongoose 验证错误:架构配置无效
【发布时间】: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 看起来像一个字段,但这就是您收到无效架构配置错误的原因。

标签: node.js validation mongoose mongoose-schema


【解决方案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"]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-11
          • 1970-01-01
          • 1970-01-01
          • 2021-07-23
          • 1970-01-01
          • 2015-11-03
          相关资源
          最近更新 更多