ユーザーオブジェクトに大文字と小文字を区別して表示させたいが、一意性のために小文字にする。私が最初に考えたのは、スキーマにプロパティを追加し、保存前のフックしようとすることです:mongoose文書の小文字の事前検証にプロパティを追加する
var userSchema = new Schema({
username: {
type: String,
required: true,
unique: true,
lowercase: true
},
usernameDisplay: String,
password: {
type: String,
required: true
}
});
userSchema.pre("save", function (next) {
this.usernameDisplay = this.username;
next();
});
をしかし、これは動作するようには思えません。 username
とのプロパティは、どちらも小文字のユーザー名として保存されます。
私は次のように働くだろうと思う:
userSchema.pre("save", function (next) {
this.userDisplayName = this.username;
this.username = this.username.toLowerCase();
next();
});
今はマングースが受信データに小文字の検証/変更を行う方法についての興味:スキーマにlowercase
検証を削除し、これを行います。
私の質問が明確でない場合はお知らせください。わかりやすくするために更新を試みることができます。
を役に立てば幸い - 私は、ユーザー名が文字列であるためと仮定し、文字列は1ではないはず変えることを、代わりに参照の値によって渡されますもう一方を変更してください。それは間違っていますか?また、スキーマにはフィールドの「小文字」オプションがあります。たぶん "検証"は間違った言葉です。なぜなら、入力を自動的に小文字にするからです。 http://mongoosejs.com/docs/schematypes.html – bobbyz
また、ユーザーの投稿内容をすべて小文字のバージョンとしてDBに保存したいと思っています。そのようにして、人が何を入力しても「一意:真」の検証が行われますが、ユーザーが最初に入力した大文字でユーザー名を表示できるようにしたいと考えています。あなたの例はそれを逆に持っていると思います。 – bobbyz
申し訳ありません、私は間違っています。私はmongooseのドキュメントをチェックしたところ、あなたは正しいです。フィールドを小文字にする小文字のオプションがあります。それはあなたが必要とするものを正確に行うようです。しかし、私は 'this.userDisplayName = this.username'の変更を試みています。なぜなら、もしそうでなければ、そのような振る舞いをしている他の理由は見当たらないからです。 – dwaksman