【发布时间】:2015-07-20 09:53:37
【问题描述】:
我有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() 我写入函数输出任何内容。
【问题讨论】:
标签: node.js mongodb express mongoose