3

すべての文字列プロパティのトリムをデフォルトで 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 }
});
4

2 に答える 2

6

スキーマ パスの一般的な構成を再利用する良い方法は、変数を使用してそれらを設定することです。

このような:

var trimmedString = { type: String, trim: true };

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

デフォルトを設定する関数から定義を返すこともできますが、2 つのオーバーライドを許可します (または、インデックスやデフォルトなどの他の設定を追加します)。

このような:

(アンダースコア ライブラリのデフォルト メソッドを使用)

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 })
});
于 2013-09-26T12:25:16.000 に答える
-1

次のように、前処理関数を追加できます (MySchema はスキーマに付けた名前です)。

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

それはそれを行う必要があります。

于 2013-01-09T19:22:30.587 に答える