2015-02-23 68 views
2

我用貓鼬用我的MongoDB的文檔工作,有你的模型:如何在使用貓鼬時實現工廠模式?

module.exports = mongoose.model('Doc', mongoose.Schema({ 
    type: 'doc' 
}, collection: "doc"); 

module.exports = mongoose.model('Folder', mongoose.Schema({ 
    type: 'folder' 
}, collection: "doc"); 

module.exports = mongoose.model('Unit', mongoose.Schema({ 
    type: 'unit' 
}, collection: "doc"); 

在某些時候(就快到例如Ajax請求),我需要在幾個類型來創建模型:

app.post('/doc/create/:type', function (req, res, next) { 
    var type = req.params.type; 
    var data = req.body; 

    // how to create model based on incoming type here? 
    // var model = new Factory.create(type); ??? 
}); 

我需要知道與類似模型一起工作的最佳實踐,並從工廠或其他東西創建實例。

請分享你的經驗。

回答

1

您可以通過使用像得到一個字符串的模式:

var mongoose = require('mongoose') 
var model = mongoose.model('Unit') 

PS:如果這是解決你的問題,我想知道,如果你在設計數據庫模型的方式實際上是正確的!你不能創建一個帶有索引「類型」屬性的單一模型「文檔」嗎?這在許多方面會更有效率。

+0

感謝您的回答。我不能創建單一模型,因爲彼此有不同的領域。 – Erik 2015-02-23 16:01:17

+0

您可以只定義所有可能的字段,然後不使用它們(字段'未定義'不是由Mongoose存儲在Mongo中) – Qualcuno 2015-02-23 16:02:33

+0

由於邏輯和數據不同,我不希望在單個模型中存儲所有可能的字段。我正在尋找解決方案來創建工廠。 – Erik 2015-02-23 16:23:11