如何在mongoose sub doc中配置默认​​枚举值?

时间:2017-04-27 11:36:14

标签: node.js

我在节点js应用程序中使用mongodb和mongoose js。我创建了一个名为“CompanySchema”的mongoose文档模式,它使用“TeamSchema”(另一个mongoose文档模式)作为子文档。在这个“TeamSchema”中,它有一个定义为雇员的数组,它使用“EmployeeSchema”(另一个mongoose文档)作为子文档。所以我的问题是当我试图保存文档“CompanySchema”时,需求状态“未满足”的默认值未设置。所以你们能解释一下我在这里做错了吗?

export var EmployeeSchema = new Schema({
 id: {
   type: String
 },
 requirement: {
   type: {
     status: {
       type: String,
       enum: ['met' 'unmet'],
       default : 'unmet'
     }
   },
   default: null
 },
});

export var TeamSchema = mongoose.model<TeamModel>("Team", new mongoose.Schema({
 id: {
   type: String,
 },
 name: {
   type: String
 },
 employees: [EmployeeSchema]
}));

export var CompanySchema = mongoose.model<CompanyModel>("Company", new mongoose.Schema({
 id: {
   type: String
 },
 team: TeamSchema.schema,
}));

1 个答案:

答案 0 :(得分:1)

我认为您的架构中存在两个问题。

首先,您使用 Mongoose 保留关键字type

  

默认情况下,如果架构中有一个键为“type”的对象,   mongoose会将其解释为类型声明。

Mongoose doc:typeKey

其次,您将默认值设置为null,如果您未使用type关键字作为属性名称,则应该会出错。尝试将type重命名为requirement_type以获取示例,您将收到此错误:

TypeError: Invalid value for schema path `requirement.default`

这是连贯的,因为它确实需要一个类型来设置默认值。

  

的SchemaType#默认(VAL)
  设置此SchemaType的默认值。

Mongoose doc:SchemaType-default

我真的不明白为什么你想默认它null,但你可以通过添加例如Mixed type来实现它:

requirement: {
   type: {},
   requirement_type: {
     status: {
       type: String,
       enum: ['met', 'unmet'],
       default : 'unmet'
     }
   },
   default: null
 }
 // => { requirement_type: null }

或者你可以删除默认值,然后你会得到:

requirement: {
   requirement_type: {
     status: {
       type: String,
       enum: ['met', 'unmet'],
       default : 'unmet'
     }
   }
 }
// => { requirement_type: { status: 'unmet' } }

注意:您必须使用逗号分隔枚举值。