Javascript Mongoose动态mongodb集合名称
我正在node.js上为mongodb使用mongoose驱动程序。我有一个模式如下 使用db.model,我可以得到具有硬编码集合名称“aggregation”的模型。它很好用 但是如何使用具有动态按需集合名称的模式/模型?基本上,我需要按需定义一个新集合,它将使用相同的模式 aggregationmodel.jsJavascript Mongoose动态mongodb集合名称,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在node.js上为mongodb使用mongoose驱动程序。我有一个模式如下 使用db.model,我可以得到具有硬编码集合名称“aggregation”的模型。它很好用 但是如何使用具有动态按需集合名称的模式/模型?基本上,我需要按需定义一个新集合,它将使用相同的模式 aggregationmodel.js var mongoose = require('mongoose'); var db = mongoose.createConnection(configfile.mong
var mongoose = require('mongoose');
var db = mongoose.createConnection(configfile.mongodb.uriAggregation);
var aggregationSchema = mongoose.Schema({
factorname : { type: String, index: true },
active : { type: Boolean},
total : [{
_id : { type: Number, index: true },
ordervolume : Number,
ordertips : Number,
ordernationality : String,
ordercancelled : Number
}
]
});
module.exports = db.model('aggregation', aggregationSchema, 'aggregation');
controller.js(此文件引用模型)
在实例化一个“新”模型时,基本上需要做的就是将所需的集合作为参数。这只是一个确定模式是否可用的范围的问题。但您始终可以从现有模型获取模式,并在新实例中使用:
var async = require('async'),
mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/modtest');
var testSchema = new Schema({},{ strict: false });
var Test = mongoose.model( "Test", testSchema, "test" );
mongoose.connection.on("open", function(err,conn) {
var ReModel = mongoose.model( "Redo", Test.schema, "redo" );
var redo = new ReModel({ "a": 1 });
redo.save(function(err,doc) {
if (err) throw err;
console.log( doc );
console.log( "done" );
});
});
结果是,实际文档被插入到与基于从其他模型实例提取的模式实例化的模型相关联的集合中
在实现中真正需要做的就是做同样的事情,并提供所需的集合作为参数输入到标准实例创建方法中。哪一部分给您带来了麻烦?您可以将同一架构用于多个模型。只需使用不同的模型和集合名称再次调用
db.model
。从controller.js如何将参数(集合名称)传递给aggregationmodel.js?您不需要。您需要更改导出模型和模式的方法,或者更改使用模式创建新模型的函数。
var async = require('async'),
mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/modtest');
var testSchema = new Schema({},{ strict: false });
var Test = mongoose.model( "Test", testSchema, "test" );
mongoose.connection.on("open", function(err,conn) {
var ReModel = mongoose.model( "Redo", Test.schema, "redo" );
var redo = new ReModel({ "a": 1 });
redo.save(function(err,doc) {
if (err) throw err;
console.log( doc );
console.log( "done" );
});
});