mongoose在预存钩子中获取db值

我想知道在一个预先保存的mongoose钩子中,一个脏道具的“干净”价值是什么:

UserSchema.pre('save', function(next) { var user = this; if (user.isModified('password')){ //i want to know what the value of user.password was before it was changed } next() } 

有没有可能查找旧值而不在数据库中查找?

默认情况下,旧值不会被存储。 你将不得不做的是跟踪后的init钩子(mongoose特征)的旧数据。

我们所做的是将原始文档的副本附加到从MongoDB提取的所有项目中。 我们有这个代码,我们需要获取每个模式的脏数据进行比较:

 schema.post( 'init', function() { this._original = this.toObject(); } ); 

NodeJS非常高效,并且在可能的情况下在写入时进行复制,所以除非修改整个文档,否则看不出内存消耗的两倍。 只有这样_original实际上消耗了两倍的记忆。

所以在一个预先保存的钩子中,通过阅读源代码的这一部分 ,我不认为以前的值存储在任何地方。 所以你将不得不从MongoDB加载文件来获取它。

但是,在将其更改为新值之前,可能需要使用virtuals机制而不是预存储钩子来存储旧值。

 var virtual = schema.virtual('password'); virtual.set(function (v) { var this._oldPassword = this.password; return v; }); 

尝试一下这些方面的东西,看看你能不能做一些适当的工作。