重用猫鼬模型的策略

时间:2016-10-22 01:05:45

标签: javascript node.js mongodb mongoose request

我使用mongoose和express.js

我设计的服务器是动态创建模型。

var schema = mongoose.Schema({ data: String }, { timestamps: true });

var model = mongoose.model(result.siteId, schema);

    var data = new model({
        data: JSON.stringify(req.body)
    });

    data.save(function (err, result) {
        if (err) {
            res.status(400).json({
                success: false
            });
        } else {
            res.status(200).json({
                success: true,
                data: result
            });
        }
    });

这是创建模型的这一部分。 (数据输入部分) 一旦服务器获得请求,请求的siteId就是模型的名称。这是正常的。 但问题是使用这个创建的模型。 我想要这个mongodb表。所以我重新宣布模型,但它不起作用。

var datas = mongoose.model('modelname', {data: String});

一旦宣布这个模型。 '数据输入部分' (高级代码)不起作用并停止服务器响应和超时消息。 但其他数据输入部分'使用另一个modelname正在运行。

我认为猫鼬从重新开放的模型中停止了。 我想声明模型其他js文件并使用。但modelsname必须是动态名称。

什么是正确的方式?

1 个答案:

答案 0 :(得分:0)

尝试重用具有不同名称的Schema时遇到类似的问题,并且只是通过向Schema创建提供集合名称来设法使其工作。

您可以通过将collection param添加到架构创建选项中来完成类似的操作。

但是你需要为每个Schema提供不同的model个对象,所以我建议根据集合名称创建一个检索模型的函数,比如

var buildModel = function(collectionName) {

  var schema = mongoose.Schema({ data: String }, { timestamps: true, collection: collectionName });

  return mongoose.model(collectionName, schema);
}

var model = buildModel(result.siteId);

var data = new model({
   ...