给出以下架构:
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-field,并调整我的代码以引用_id
而不是email
,但这对我来说并不干净。
任何?
答案 0 :(得分:35)
由于您使用的是Mongoose,因此一种方法是使用电子邮件字符串作为_id
字段,然后添加一个名为email
的{{3}},其中_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);
});
清理使用电子邮件的代码。
virtuals: true
请注意,将Mongoose doc转换为普通JS对象或JSON字符串时,默认情况下不包含虚拟字段。要包含它,您必须在virtual field或toObject()
来电中设置var obj = doc.toObject({ virtuals: true });
var json = doc.toJSON({ virtuals: true });
选项:
{{1}}