【问题标题】:Mongoose.js Never Save Field Via SetMongoose.js 从不通过 Set 保存字段
【发布时间】:2012-10-19 23:55:46
【问题描述】:

有没有办法在猫鼬中将字段标记为未修改?

我有一个猫鼬模式:

var schema = mongoose.Schema({
    field          : { type : String   }
  , fieldGenerated : { type : [String] }
});

我想让fieldGenerated永远不会被model.set( ... )设置。

它应该设置的唯一方法是在预保存中间件中:

schema.pre( 'save', function( next ) {

    // Any way to mark fieldGenerated as NOT modified here?

    // I only want to set fieldGenerated if field was set.
    // I don't want fieldGenerated to be set any other way.
    if ( this.field && this.isModified( 'field' ) ) {
        this.fieldGenerated = this.field.split( ' ' );
        this.markModified( 'fieldGenerated' );
    }

    next();
}

有没有办法做到这一点?

【问题讨论】:

    标签: javascript node.js mongoose


    【解决方案1】:

    不是直接的,但是如果你只是重新生成字段,如果它被修改了呢:

    schema.pre( 'save', function( next ) {
        if ( this.field && ( this.isModified( 'field' ) || this.isModified( 'fieldGenerated' ) ) {
            this.fieldGenerated = this.field.split( ' ' );
        }
        next();
    }
    

    【讨论】:

    • 这是一个很好的解决方法,但它需要额外的处理以在不需要时重新生成字段。如果生成字段不便宜,这是不可接受的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    相关资源
    最近更新 更多