Mongoose动态mongodb集合名称

时间:2014-07-31 04:37:13

标签: javascript node.js mongodb mongoose

我在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');

1 个答案:

答案 0 :(得分:2)

你只需要实例化一个" new"具有所需集合作为参数的模型。只是确定架构是否可用的范围问题。但您总是可以从现有模型中获取模式并在新实例中使用:

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" );
  });


});

结果是,实际文档被插入到与您根据从其他模型实例中提取的模式实例化的模型相关联的集合中。

您在实现中真正需要做的就是同样的事情,并提供所需的集合作为参数,以提供给标准实例创建方法。