如果要更改某个属性,请不要更改updated_at属性

时间:2015-07-10 18:55:50

标签: node.js mongoose

我在Mongoose中有一个Article模型,有几个属性,其中一个是布尔值,approved

我还有两个日期属性,created_atupdated_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属性来显示一个小小的#34;已编辑的"文字,如果updated_at !== created_at

如果有任何属性但是updated_at被更改,我是否可以更改approved

谢谢!

1 个答案:

答案 0 :(得分: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();
});