27

次のスキーマがあるとします。

var UserSchema = new Schema({
   , email   :  { type: String }
   , passwordHash   :  { type: String }
   , roles  :  { type: [String] }
});

email鍵になりたい。これをどのように定義できますか?

私はそれをできた:

var UserSchema = new Schema({
       , _id:  { type: String }
       , passwordHash   :  { type: String }
       , roles  :  { type: [String] }
    });

そのため、MongoDB はそれを id フィールドとして認識し、_id代わりに参照するようにコードを適応させますemailが、それは私にはきれいに感じられません。

誰?

4

1 に答える 1

49

Mongoose を使用しているため、1 つのオプションは、電子メール文字列をフィールドとして使用し、電子メールを使用するコードをクリーンアップするためにを返すという名前の仮想フィールド_idを追加することです。email_id

var userSchema = new Schema({
    _id: {type: String},
    passwordHash: {type: String},
    roles: {type: [String]}
});

userSchema.virtual('email').get(function() {
    return this._id;
});

var User = mongoose.model('User', userSchema);

User.findOne(function(err, doc) {
    console.log(doc.email);
});

Mongoose ドキュメントをプレーンな JS オブジェクトまたは JSON 文字列に変換する場合、仮想フィールドはデフォルトでは含まれないことに注意してください。それを含めるには、または呼び出しvirtuals: trueでオプションを設定する必要があります。toObject()toJSON()

var obj = doc.toObject({ virtuals: true });
var json = doc.toJSON({ virtuals: true });
于 2012-04-27T20:36:38.803 に答える