我正在尝试在多个模型/模式/嵌套文档中创建自动增量字段,所以类似于(用*标记自动增量字段
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);
在每个模型中,但我不确定这是'最佳实践'