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

Bil*_*ill 6 mongoose node.js

我正在尝试找出使用mongoose.js时跟踪字段更改的最佳方法.例如,每次name设置对象上的字段时,我都想在该对象的历史记录中添加一个新条目(作为嵌入文档){ field: 'name', previous: 'foo', current: 'bar', date: '3/06/2012 9:06 am' }.

我开始尝试使用一个挂钩的插件.pre('save')但我无法弄清楚哪些字段已被修改而没有从数据库中获取旧值并自己比较它们.然后我想我可以使用自定义setter,但我遇到了同样的问题 - 我不知道哪个字段被修改了.目前我还做了类似这样的事情,将字段名称硬编码到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;
}
Run Code Online (Sandbox Code Playgroud)

但这意味着我需要为每个要跟踪的字段名称设置自定义设置器.我猜想必须有更好的方法来实现这一目标.

Bil*_*ill 6

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

  • 你是如何使用modifiedPaths获得旧值的? (3认同)