2016-10-06 2 views
0

ユーザーオブジェクトに大文字と小文字を区別して表示させたいが、一意性のために小文字にする。私が最初に考えたのは、スキーマにプロパティを追加し、保存前のフックしようとすることです: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検証を削除し、これを行います。

私の質問が明確でない場合はお知らせください。わかりやすくするために更新を試みることができます。

答えて

0

まず、mongooseには、小文字の検証が含まれていると思われます。

第2に、あなたのアプローチは私にとってはよかったようです。しかし、私はmongoose仮想(これはvirtuals applicationの教科書の例です)を使用することをお勧めします。 短い参照:バーチャルは、保存されずに毎回計算されるフィールドです。あなたはこのようなことをすることができます

userSchema.virtual('userDisplayName').get(function(){ 
    return this.username. toLowerCase(); 
}); 

"userDisplayName"を使用すると透明になりますが、フィールドは保存されません。

最後に少なくとも、あなたのコードについて、それは、このように一方が他方を変更する変更、なぜならあなたには同一の参照に2名を割り当てている。このライン

this.userDisplayName = this.username; 

のDB内の同じデータを保存しているではありません。代わりにこれを試してください。

this.userDisplayName = this.username.toLowerCase(); 
next(); 

が、それは `this.userDisplayName = this.username`について

+0

を役に立てば幸い - 私は、ユーザー名が文字列であるためと仮定し、文字列は1ではないはず変えることを、代わりに参照の値によって渡されますもう一方を変更してください。それは間違っていますか?また、スキーマにはフィールドの「小文字」オプションがあります。たぶん "検証"は間違った言葉です。なぜなら、入力を自動的に小文字にするからです。 http://mongoosejs.com/docs/schematypes.html – bobbyz

+0

また、ユーザーの投稿内容をすべて小文字のバージョンとしてDBに保存したいと思っています。そのようにして、人が何を入力しても「一意:真」の検証が行われますが、ユーザーが最初に入力した大文字でユーザー名を表示できるようにしたいと考えています。あなたの例はそれを逆に持っていると思います。 – bobbyz

+0

申し訳ありません、私は間違っています。私はmongooseのドキュメントをチェックしたところ、あなたは正しいです。フィールドを小文字にする小文字のオプションがあります。それはあなたが必要とするものを正確に行うようです。しかし、私は 'this.userDisplayName = this.username'の変更を試みています。なぜなら、もしそうでなければ、そのような振る舞いをしている他の理由は見当たらないからです。 – dwaksman

関連する問題