7

フィールドを持つUserスキーマがありusernameます。このフィールドで大文字と小文字を区別して、ユーザーがBobDylan. ただし、新しいエントリを検証して重複がないことを確認するには、スキーマが必要bobdylanです。

調査の結果、一意かどうかを簡単に確認できるように、スキーマに小文字と大文字のバージョンを格納する追加のフィールドを作成する必要があることがわかりました。私の質問は、Mongoose API を使用してこれをどのように達成するかということです。

set次のような関数を使用してみました。

UserSchema.path('username_lower_case').set(function(username_lower_case) {
  return this.username.toLowerCase()
});

ただし、この機能は実行されていないようです。私は基本的username_lower_caseに何であれusername、小文字であると言う必要があります。

4

1 に答える 1

10

1 つの方法は、事前保存フックを使用してそれを行うことです。

UserSchema.pre('save', function (next) {
    this.username_lower_case = this.username && this.username.toLowerCase();
    next();
});

別の方法はusername、仮想を作成することです。

UserSchema.virtual('username').set(function (value) {
    this.username_raw = value;
    this.username_lower_case = value && value.toLowerCase();
}).get(function () {
    return this.username_raw;
});
于 2012-12-24T18:05:45.497 に答える