使用动态集合名称

时间:2015-07-15 15:34:41

标签: node.js mongodb mongoose koa

我为每个连接到数据库的用户创建了一个动态集合,因此集合名称为{userID} - {collection_name}。 对于每个模型,我正在导出返回像这样的

的猫鼬模型的函数
module.exports = function (userId) {
    return mongoose.model(
        'Device',
        DeviceSchema,
        userId + '-' + config.collection_names.device);
}

在我开始引用模式之前,一切正常。我的DeviceSchema

var DeviceSchema = new Schema(
    {
        _id: {type: String, required: true, index: true},
        name: {type: String, required: true},        
        sensors: [{type: String, ref: 'Sensor'}]
    }
);

现在,当我想找到填充了传感器的用户设备时

var devices = yield models.Device(userId).find({}).populate('sensors').exec()

我当然得到了MissingSchemaError

MissingSchemaError: Schema hasn't been registered for model "Sensor".

我知道我必须在引用之前注册所有模式,但尝试为每个请求加载模式看起来有点奇怪,例如像

try {
    var devices = yield models.Device(userId).find({}).populate('sensors').exec()
}
catch {
    models.Sensor(userId);
    var devices = yield models.Device(userId).find({}).populate('sensors').exec()
}

我担心这种方法不适合最佳实践,我不确定它是如何表现明智的。 那我该怎么设计这样的东西呢?是否可以通过集合名称中的前缀来区分“用户”数据库?

0 个答案:

没有答案