我使用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必须是动态名称。
什么是正确的方式?
答案 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({
...