Вопрос по mongodb, mongoose – Мангуст: как установить поле схемы в качестве идентификатора?

19

Дана следующая схема:

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

Мне нравитсяemail быть ключом. Как я могу определить это?

Я мог бы сделать:

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

поэтому MongoDB распознает его как поле id и адаптирует мой код для обращения к_id вместоemail но это не кажется мне чистым.

Кто-нибудь?

Я думаю, вам лучше оставить _id в качестве ObjectID и сделать электронную почту уникальным индексом. JohnnyHK
Поскольку вы используете Mongoose, другим вариантом будет использование строки электронной почты в качестве поля _id, а затем добавлениеvirtual field по имени & quot; электронная почта & quot; это вернул _id, чтобы очистить код, который использует электронную почту. JohnnyHK
Это общий консенсус? Наличие доменных идентификаторов как уникальных и возможность MongoDB позаботиться о технических идентификаторах? Geert-Jan

Ваш Ответ

1   ответ
35

одним из вариантов является использование строки электронной почты в качестве_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 });
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы