我有以下mongoose.model('quotes')
美元的型号:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var quotesSchema = new Schema({
created: { type: String, default: moment().format() },
type: { type: Number, default: 0 },
number: { type: Number, required: true },
title: { type: String, required: true, trim: true},
background: { type: String, required: true },
points: { type: Number, default: 1 },
status: { type: Number, default: 0 },
owner: { type: String, default: "anon" }
});
var settingsSchema = new Schema({
nextQuoteNumber: { type: Number, default: 1 }
});
// Save Setting Model earlier to use it below
mongoose.model('settings', settingsSchema);
var Setting = mongoose.model('settings');
quotesSchema.pre('save', true, function(next) {
Setting.findByIdAndUpdate(currentSettingsId, { $inc: { nextQuoteNumber: 1 } }, function (err, settings) {
if (err) { console.log(err) };
this.number = settings.nextQuoteNumber - 1; // substract 1 because I need the 'current' sequence number, not the next
next();
});
});
mongoose.model('quotes', quotesSchema);
对于mongoose.model('settings')
,还有一个额外的模式,用于存储递增的唯一索引Quote.number
的递增数字.在每次保存之前,调用quotesSchema.pre('save')
来读取、增加nextQuoteNumber
,并将其作为this.number
传递给相应的next()
函数.
然而,在其他地方保存Quote
时,整个.pre('save')
函数似乎不会触发.Mongoose中止保存,因为number
是必需的,但没有定义,而且我写入函数的console.log()
从未输出任何内容.