Отслеживание изменений в полях с помощью mongoose.js

Я пытаюсь найти лучший способ отслеживать изменения в полях при использовании mongoose. js. Например, каждый раз, когда устанавливается поле nameдля объекта, я хочу добавить новую запись в историю этого объекта (как встроенный документ), которая выглядит примерно так { field: 'name' , предыдущая: 'foo', текущая: 'bar', дата: '06.03.2012, 9:06' }.

Я начал с попытки использовать подключаемый модуль, который перехватывает .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;
}

Но это означает, что мне нужен пользовательский установщик для каждого имени поля, которое я хочу отслеживать. Я предполагаю, что должен быть лучший способ сделать это.

6
задан Bill 11 March 2012 в 23:31
поделиться