2015-07-10 2 views
1

У меня есть модель Article в Mongoose с несколькими атрибутами, одна из которых является логической, approved.Не изменяйте атрибут updated_at при изменении определенного атрибута

У меня также есть два атрибута даты, created_at и updated_at. Я обработки эти два с помощью следующей функции:

ArticleSchema.pre('save', function (next) { 
    'use strict'; 
    var now = new Date(); 
    this.updated_at = now; 
    if (!this.created_at) { 
     this.created_at = now; 
    } 
    next(); 
}); 

Используя этот код, updated_at, изменяется, даже если я только одобрить статью - однако, я использую атрибут updated_at, чтобы показать крошечные «Отредактировано» текст, если updated_at !== created_at.

Есть ли способ получить updated_at, если какой-либо из атрибутов НО approved меняется?

Спасибо!

ответ

3

Вы можете использовать Document#modifiedPaths() method перечислить все модифицированные пути:

ArticleSchema.method('isUpdated', function() { 
    'use strict'; 
    var modified = this.modifiedPaths(); 
    switch (modified.length) { 
     case 0: 
      return false; 
     case 1: 
      return !~modified.indexOf('approved'); 
     default: 
      return true; 
    } 
}); 

ArticleSchema.pre('save', function (next) { 
    'use strict'; 
    var now = new Date(); 
    if (!this.created_at) { 
     this.created_at = this.updated_at = now; 
    } else if (this.isUpdated()) { 
     this.updated_at = now; 
    } 
    next(); 
});