Node.js 使用mongoose.js跟踪对字段的更改
我试图找出在使用mongoose.js时跟踪字段更改的最佳方法。例如,每次设置对象上的Node.js 使用mongoose.js跟踪对字段的更改,node.js,mongoose,Node.js,Mongoose,我试图找出在使用mongoose.js时跟踪字段更改的最佳方法。例如,每次设置对象上的name字段时,我都希望向该对象的历史记录(作为嵌入文档)添加一个新条目,该条目类似于{field:'name',previous:'foo',current:'bar',date:'3/06/2012 9:06 am'} 我开始尝试使用一个钩住.pre('save')的插件,但如果不从数据库中获取旧值并亲自比较,我无法确定哪些字段已被修改。然后我想我可以使用自定义设置器,但我遇到了同样的问题——我不知道修改了
name
字段时,我都希望向该对象的历史记录(作为嵌入文档)添加一个新条目,该条目类似于{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”。这正是我需要确定哪些字段已被修改的地方。您是如何使用modifiedPaths获取旧值的?@Totty.js对于任何偶然发现此问题的人,mongoose目前不会自动跟踪旧值,但是这里有一个解决方案:@helion3看起来这个链接已经过时了这个问题解决了跟踪旧值的问题