2015-02-23 52 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