JKu*_*ald 12 mongoose mongodb node.js express
我有以下模型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);
Run Code Online (Sandbox Code Playgroud)
还有一个额外的Schema用于mongoose.model('settings')
存储递增的唯一索引Quote.number
我想要建立的增量数.之前每次保存,quotesSchema.pre('save')
被称为读取,增加并通过nextQuoteNumber
为this.number
到分别next()
的功能.
但是,.pre('save')
在Quote
其他地方保存时,似乎没有触发整个功能.Mongoose中止保存因为number
是必需的但没有定义,并且console.log()
我没有写入函数输出任何东西.
vic*_*ohl 33
使用pre('validate')
而不是pre('save')
设置必填字段的值.Mongoose在保存之前验证文档,因此save
如果存在验证错误,则不会调用中间件.将中间件从中切换save
到validate
将使您的函数在验证之前设置数字字段.
quotesSchema.pre('validate', 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();
});
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7922 次 |
最近记录: |