web-dev-qa-db-ja.com

マングース:スキーマフィールドをIDに設定する方法は?

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

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フィールドとして認識し、コードをemailではなく_idを参照するように適合させますが、それは私にはわかりません。

誰でも?

20
Geert-Jan

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

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文字列に変換する場合、デフォルトでは仮想フィールドは含まれないことに注意してください。これを含めるには、 toObject() または toJSON() 呼び出しでvirtuals: trueオプションを設定する必要があります。

var obj = doc.toObject({ virtuals: true });
var json = doc.toJSON({ virtuals: true });
35
JohnnyHK