我正在尝试找出使用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;
}
但这意味着我需要为每个要跟踪的字段名称设置自定义设置器。我猜想必须有更好的方法来实现这一目标。
答案 0 :(得分:6)
看起来我错过了'Document.modifiedPaths'。这正是我需要确定哪些字段已被修改。