2017-04-27 58 views
6

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

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

需求属性只有一个字段。我想知道为什么你定义了另一个字段的“状态”并为它定义了枚举。 – notionquest

+0

我想在不久的将来在需求属性中添加一些其他属性。但现在它只有属性状态是一个枚举。该属性的默认值应该是“未满足”,并且在运行时将被更新为“已满足” –

回答

1

我认为你的模式有两个问题。

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

By default, if you have an object with key 'type' in your schema, mongoose will interpret it as a type declaration.

猫鼬DOC:typeKey

其次,你的默认值设置为null,如果你没有使用type关键字作为属性名称应该给你一个错误。尝试重命名typerequirement_type为为例,你会得到这样的错误:

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

这是一致的,因为它恰恰需要一个类型来设置默认值。

SchemaType#default(val)
Sets a default value for this SchemaType.

猫鼬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' } } 

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