[英]Mongoose dynamic mongodb collection name
我在node.js上为mongodb使用mongoose驱动程序。 我有一个如下的架构。
使用db.model可以获得带有硬编码集合名称“ aggregation”的模型。 工作正常。
但是,如何将模式/模型与动态按需集合名称一起使用? 基本上,我将需要按需定义一个新集合,它将使用相同的架构。
aggregationmodel.js
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 Aggregates = require('../models/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" );
});
});
结果是,根据从其他模型实例提取的架构,将实际文档插入到与您实例化的模型绑定的集合中。
在实现过程中,您真正需要做的全部就是同一件事,并提供所需的集合作为参数,以馈入标准实例创建方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.