次のスキーマがあるとします。
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
を参照するように適合させますが、それは私にはわかりません。
誰でも?
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 });