我正在構建基於Node.js + Express + Mongoose的CMS。我需要業務和數據訪問方法的抽象層。所以我有包含調用數據庫的方法的biz類。在不存儲所有屬性的情況下擴展Mongoose模型
這些調用是直接使用Mongoose模型製作的,所以我的邏輯實體是Mongoose實體。
問題是某些邏輯實體並不總是與其數據庫實體相同。
例如:我有一個名爲「Item」的模型及其屬性,這些屬性必須存儲到數據庫中,這很好。現在,我需要一個新的屬性,名爲「similar_items」的數組,最終可以包含其他項目的列表,但我不想將此屬性存儲在數據庫中。
var itemSchema = new Schema({
id: { type: Number, index: true },
name: { type: String }
});
var item = mongoose.model('Item', itemSchema);
var data = new Item();
/* do stuff.... */
data.similar_items = blahblah; //I can't set this property as it doesn't exists!
是否有可能擴展一個Mongoose模型的屬性超出其模式?我知道我可以用getter和setter定義虛擬屬性,但我仍然沒有「地方」來存儲我的數組。
有什麼想法? 我應該分開我的邏輯和Mongoose模型嗎?
您可以在添加'similar_items'之後對'data'發生什麼擴展?你保存它還是去掉另一層? – JohnnyHK 2014-08-27 13:50:00
它根本不設置變量。如果我這樣做data.similar_items = [1,2,3]然後我用console.log(數據)檢查對象它不顯示similar_items屬性。我猜Mongoose鉤住了屬性,它檢查它是否在模式中,如果沒有,它會將其刪除。 – 2014-08-27 14:06:39
正確的是,如果你在這時使用'data'作爲一個Mongoose實例,調用'data = data.toObject();'將它轉換爲一個普通的JS對象,你可以添加它屬性。 – JohnnyHK 2014-08-27 14:10:36