mongoose自动增加多个模型

时间:2016-02-26 16:20:49

标签: node.js mongodb mongoose

我正在尝试在多个模型/模式/嵌套文档中创建自动增量字段,所以类似于(用*标记自动增量字段

 Vegetables:
    [
         {
             name: Carrot
             *number: 1
             plantings : [{*number: 1 }, {*number: 2}]
         }
         {
             name: Squash
             *number: 2
             plantings: [{*number: 1},{*number: 2}, {*number: 3}]
         }
    ]

我尝试使用此处找到的解决方案...... Mongoose auto increment。我的代码有点不同,因为我为每个架构/模型使用单独的文件......

/* Counter.js (I put this here because I want to re-use it this may not make sense) */
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
module.exports = mongoose.model('Counter', new Schema({
    _id: {type: String, required: true},
    seq: {type: Number, default: 0}
}));    


/* Vegetable.js */
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var PlantingSchema = require('./planting').schema;
var Counter = require('./counter');

var vegetableSchema = new Schema({
   name: String,
   number: Number
   plantings: [PlantingSchema]
});

vegetableSchema.pre('save', function(next) {
var doc = this;
Counter.findByIdAndUpdate({_id: 'entityId'}, {$inc: { seq: 1} },
   function(error, counter)   {
    if(error)
        return next(error);
    doc.number = counter.seq;
    next();
});

module.exports = mongoose.model('Vegetable', vegetableSchema);

当我尝试运行此代码时,findByIdAndUpdate内的'counter'是'null'值。

我认为我对这些模型/模式如何适用于我正在尝试的工作缺乏一些基本的理解。

我还看了一下自动增量插件,但是我看到的所有样本似乎都希望连接出现在模型/模式定义中,这对我来说并不适合使用单独的文件。 ..但如果您认为这是一种更好的方法,并且可以解释如何在我的方案中进行初始化工作,那也没关系。目前我的mongo连接只在我的服务器文件中创建,其中需要这些模型/模式。

/* Note here in the whatevermymodel.js 
      does not contain an instance of the 
      mongoose/db connection */
autoIncrement.initialize(mongoose.connection);
CounterSchema.plugin(autoIncrement.plugin, 'Counter');
var Counter = mongoose.model('Counter', CounterSchema);

更新

通过执行

,我能够使自动增量插件正常工作
mongoose.createConnection(config.database);

在每个模型中,但我不确定这是'最佳实践'

0 个答案:

没有答案