In my database collections, I want to update a \'lastChanged\' field every time the record is updated with the current datetime. I want it to be in the same format as mongoo
One way of accomplishing this is to use Mongoose Middleware and update the field pre-save.
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//schema
var SomethingSchema = new Schema({
text: {type: String},
createdAt: {type: Date, default: Date.now},
updatedAt: {type: Date, default: Date.now}
});
//middle ware in serial
SomethingSchema.pre('save', function preSave(next){
var something = this;
something.updatedAt(Date.now());
next();
});
It seems, however, that the middleware is not always invoked:
Notes on findAndUpdate()
preandpostare not called for update operations executed directly on the database, includingModel.update,.findByIdAndUpdate,.findOneAndUpdate,.findOneAndRemove,and.findByIdAndRemove.order to utilizepreorpostmiddleware, you shouldfind()the document, and call theinit,validate,save, orremovefunctions on the document. See explanation.
Update: See this question "add created_at and updated_at fields to mongoose schemas"