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