Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用mongoose.js跟踪对字段的更改_Node.js_Mongoose - Fatal编程技术网

Node.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')的插件,但如果不从数据库中获取旧值并亲自比较,我无法确定哪些字段已被修改。然后我想我可以使用自定义设置器,但我遇到了同样的问题——我不知道修改了

我试图找出在使用mongoose.js时跟踪字段更改的最佳方法。例如,每次设置对象上的
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看起来这个链接已经过时了这个问题解决了跟踪旧值的问题