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+isOnCoderwall@domain.come em algum momento eu ganhei algum bom senso (provavelmente devido a estar cansado de digitar isso o tempo todo) e mude para something@sensible.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.