【问题标题】:How to update mongoose default string schema property trim?如何更新猫鼬默认字符串模式属性修剪?
【发布时间】:2012-12-21 16:38:44
【问题描述】:

我希望每个字符串属性都默认设置为 true。 有什么办法吗?

?? mongoose.Schema.String -> default { trim: true }

var schema = new Schema({
  p1: { type: String },
  p2: { type: String, trim: true }
  p3: { type: String, trim: true }
  p4: { type: String }
});

【问题讨论】:

    标签: mongoose


    【解决方案1】:

    为模式路径重用通用配置的一个好方法是使用变量来设置它们。

    像这样:

    var trimmedString = { type: String, trim: true };
    
    var schema = new Schema({
      p1: trimmedString,
      p2: trimmedString,
      p3: trimmedString,
      p4: trimmedString
    });
    

    您还可以从为您设置默认值的函数返回定义,但允许您进行两个覆盖(或添加其他设置,如索引或默认值)。

    像这样:

    (使用下划线库的defaults method

    var _ = require('underscore');
    
    var stringType = function(ops) {
      return _.defaults(ops || {}, {
        type: String,
        trim: true
      });
    }
    
    var schema = new Schema({
      p1: stringType(),
      p2: stringType({ index: true }),
      p3: stringType({ default: "something" }),
      p4: stringType({ trim: false })
    });
    

    【讨论】:

      【解决方案2】:

      您可以添加一个预处理函数,如下所示(MySchema 是您调用架构的名称):

      MySchema.pre('save', function(next) {
        for (var fld in this) {
          this[fld] = trim(this[fld]);
        }
        next();
      });
      

      应该可以的。

      【讨论】:

      • 这很危险。除非架构中的所有属性都是字符串,否则您将遇到问题。充其量是在每次保存文档时重写文档中的每个属性,更糟糕的是,您正在覆盖数据或导致错误,因为您刚刚将数组设置为 trim(array)。请参阅我的答案以获得更安全的方法。
      • 另外,这会不必要地影响您的操作性能,特别是因为 Mongoose 已经提供了一个修剪操作,它可以“自动”并且以非侵入性的方式进行。
      猜你喜欢
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2022-07-29
      • 2019-11-07
      • 2019-04-28
      • 1970-01-01
      • 2015-04-11
      相关资源
      最近更新 更多