设置Mongoose集合名称

时间:2018-04-17 15:35:02

标签: javascript node.js mongodb mongoose mongoose-schema

我用这个破坏了我的头脑。我想将集合名称传递给Mongoose Schema对象实例的模型构造函数。

let mongoose = require('mongoose'),
    Schema = mongoose.Schema;

let schema = new Schema({
    name: {type: String}
}, { collection: 'testing' });

module.exports = mongoose.model("Item", schema);

我可以使用如上所示的collection参数将其从项目更改为测试。我也尝试通过对象上的方法设置属性。它设置正确,如预保存挂钩中所示。但该实例仍使用原始集合名称。我想从调用代码中传入一个集合名称。

let schema = require(path.join(__rel__, __models__, "schema"));
let item = new schema(itemObject);
    item.save(function(err, item) {});

我想要一些传递该对象的新集合名称的方法来存储。

2 个答案:

答案 0 :(得分:0)

我已将架构修改为:

module.exports = function(collectionName) {
    return mongoose.model("Item", ItemSchema, collectionName);
};

并称之为:

Item = require(path.join(__rel__, __models__, "ItemSchema")) 
("the_collection_name")

工作正常。

答案 1 :(得分:0)

我声明了下面的架构

    const mongoose = require('mongoose');
    const Schema = mongoose.Schema;
    const marksSchema = new Schema({
      username: String,
      year: Number,
      section: String,
      week: Number,
      marks: [{
        qid: String,
        questionName: String,
        marksScored: Number,
        isAttempted: Boolean
      }],
      quizmarks:Number,
    });

    module.exports = mongoose.model('marks', marksSchema, 'marks');

并在server.js中将其引用如下

const Marks = require('../models/Marks');

models是包含我所有模式的文件夹,它是我的server.js

之外的目录