使用mongoose.js跟踪对字段的更改

我试图找出使用mongoose.js时跟踪字段更改的最佳方法。 例如,每次设置对象上的name字段,我想添加一个新的条目到该对象的历史(作为embedded式文档),看起来像{ field: 'name', previous: 'foo', current: 'bar', date: '3/06/2012 9:06 am' }

我开始尝试使用插件.pre('save')但我不知道哪些字段已被修改,而不从数据库中获取旧值,并自己比较它们。 然后,我想我可以使用自定义设置器,但我遇到了同样的问题 – 我不知道哪个字段被修改。 目前,我只剩下这样的事情,把这个字段名字硬编码到setter中:

 var comment = new Schema({ name : { type: String, set: trackName }, history : [Change] }); var trackName = function(val) { var change = new Change; change.field = 'name'; change.previous = this.name; change.current = val; change.date = Date.now(); this.history.push(change); return val; } 

但是这意味着我需要一个自定义的setter来为每个字段名称,我想跟踪。 我猜测一定有更好的方法来实现这一点。

看起来我错过了“Document.modifiedPaths”。 这正是我需要确定哪些字段已被修改。