2017-04-27 104 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' } } 

注意:您必須用逗號分隔枚舉值。