我有以下的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);
为了存储递增的唯一索引Quote.number
,我需要为mongoose.model('settings')
添加一个额外的模式。在每次保存之前,调用quotesSchema.pre('save')
来读取、增加并将nextQuoteNumber
作为this.number
传递给相应的next()
函数。
然而,当在其他地方保存Quote
时,整个.pre('save')
函数似乎不会触发。由于未定义number
并且没有任何console.log()
输出到函数中,因此Mongoose中止保存。
pre('save')
中执行了该操作,因为它最终并不经常发生。如果我没有在我的number
上设置required: true
,那么我的变量也能正常工作,对吗? - JKunstwald