【问题标题】:Mongoose dynamic mongodb collection nameMongoose 动态 mongodb 集合名称
【发布时间】:2014-09-22 22:15:51
【问题描述】:

我在 node.js 上为 mongodb 使用 mongoose 驱动程序。我有一个如下架构。

使用 db.model 我可以获得具有硬编码集合名称“聚合”的模型。它工作正常。

但是如何使用带有动态按需集合名称的架构/模型?基本上,我需要按需定义一个新的集合,它会使用相同的模式。

聚合模型.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');

【问题讨论】:

  • 哪一部分给你带来了麻烦?您可以对多个模型使用相同的模式。只需使用不同的模型和集合名称再次调用 db.model
  • 来自controller.js 如何将参数(集合名称)传递给aggregationmodel.js?
  • 你没有。您将更改导出模型和架构的方法或使用该架构创建新模型的函数。

标签: javascript node.js mongodb mongoose


【解决方案1】:

您基本上需要做的就是实例化一个“新”模型,该模型具有所需的集合作为参数。这只是一个关于模式是否可用的范围问题。但是您始终可以从现有模型中获取架构并在新实例中使用:

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


});

结果是实际文档被插入到与您基于从其他模型实例中提取的架构实例化的模型相关联的集合中。

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

【讨论】:

    猜你喜欢
    • 2013-07-22
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多