我在节点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,
}));
答案 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' } }
注意:您必须使用逗号分隔枚举值。