Expor valores anteriores em Mongoose

Recentemente, descobri que precisava acessar o valor anterior de alguns itens do esquema mongoose em meu pre('save')middleware e pensei que outras pessoas poderiam achar esta solu├ž├úo ├║til:

Defina seu esquema

var Model = new mongoose.Schema({
email
: {
type
: String,
// This method holds the magic
set: function(email) {
this._email = this.email;
return email;
}
});

Uso de Middleware

Model.pre('save', function (next) {
var oldEmail = this._email;
if(this.isModified('email')) {
// Some condition that fires before save if the email changes ... or something.
// Maybe we wanna fire off an email to the old address to let them know it changed
console
.log("%s has changed their email to %s", oldEmail, this.email);
}
next
();
});

Ent├úo, digamos que meu e-mail original foi josey.morton+[email protected].come em algum momento eu ganhei algum bom senso (provavelmente devido a estar cansado de digitar isso o tempo todo) e mude para [email protected].com.

A modelo veria que 1. Meu e-mail mudou e 2.saberia do que ele mudou.

O middleware poderia ent├úo disparar um e-mail para o endere├žo anterior e, se eu n├úo modificasse o e-mail, saberia que estou h4x0rd e poderia agir de acordo.

Espero que isso ajude algu├ęm, caso contr├írio, os ├║ltimos 4 minutos foram perdidos e minha vida ├ę um fracasso.