Mongoose 验证错误:无效的模式配置

问题描述 投票:0回答:8

尝试通过嵌入文档来模拟集合之间的关系 但是在模式中验证并将“required”设置为 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

node.js validation mongoose mongoose-schema
8个回答
4
投票

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

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

Refer:模型引用文档之间的一对多关系 为了更好的模式设计


2
投票

删除

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
});

1
投票

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


1
投票

请分享完整代码。

也许主要原因是你没用过

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
    },
  })
);

你可以这样做。


0
投票

导出流派模型为

exports.genreSchema = genreSchema

然后在

movies.js
文件中将模型导入为
import { genreSchema } from './genre.model'

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


0
投票

因为你忘了在这里加上“,”:

genre: genreSchema <<<here
required: true

应该是:

genre: genreSchema,
required: true

0
投票

如果你面临“required:true”的问题

不要传递函数

new mongoose.Schema({})
。而不是这个你只需要做
const Schema = mongoose.Schema;
然后使用
Schema({})
.

肯定有用。


0
投票
A simple way to solve it.

import { Schema, model, Model } from 'mongoose';

    const obj1Scheema:Schema = new Schema({
        genre:{type:genreSchema.schema, ... rest of the presets} 
        GenreArr: {type:[genreSchema.schema], ... rest of the presets}
    })

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

/*
        genre:{ ... genre fields} 
        GenreArr:[{... genre fields}]

*/
I hope to help you all.
© www.soinside.com 2019 - 2024. All rights reserved.