【问题标题】:Tracking changes to fields using mongoose.js使用 mongoose.js 跟踪字段更改
【发布时间】:2012-03-12 23:39:08
【问题描述】:

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

我首先尝试使用挂钩.pre('save') 的插件,但如果不从数据库中获取旧值并自己比较它们,我无法弄清楚哪些字段已被修改。然后我想我可以使用自定义设置器,但我遇到了同样的问题——我不知道哪个字段被修改了。目前我只剩下这样的事情,将字段名称硬编码到设置器中:

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;
}

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

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

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

    【讨论】:

    • 您是如何仅使用 modifiedPaths 获得旧值的?
    • @Totty.js 对于任何偶然发现这个问题的人,猫鼬目前不会自动跟踪旧值,但这里有一个解决方案:pste.me/#/FU1Kg
    • @helion3 看起来该链接已过期
    • 本题有解决跟踪旧值问题stackoverflow.com/a/18195850
    猜你喜欢
    • 2018-01-18
    • 2011-06-02
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2017-04-16
    相关资源
    最近更新 更多