Ich habe folgendes Modell für mongoose.model('quotes')
:Mongoose .pre (‚speichern‘) nicht auslösen
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);
Es gibt ein zusätzliches Schema für mongoose.model('settings')
eine fortlaufende Nummer für das Erhöhen eindeutige Index Quote.number
im speichern versuchen, Gründen. Vor jedem Speichern wird quotesSchema.pre('save')
aufgerufen, um zu lesen, zu erhöhen und die nextQuoteNumber
als this.number
an die jeweils next()
Funktion zu übergeben.
Allerdings scheint diese gesamte .pre('save')
Funktion nicht zu aktivieren, wenn Sie eine Quote
an anderer Stelle speichern. Mongoose bricht den Speicher ab, da number
erforderlich ist, aber nicht definiert ist und keine console.log()
ich schreibe in die Funktion überhaupt nichts aus.
Danke. Am Ende habe ich nur die Aktion in meinem 'pre ('save')' gemacht, wann immer ich wirklich gespart habe, da es nicht so oft passiert ist. Ich nehme an, dass meine Variante auch funktioniert hätte, wenn ich 'required: true' nicht auf meine' Nummer' gesetzt hätte? – JKunstwald
Du hast mein Leben gerettet! Vielen Dank :) – Sparw