Mongoose:如何将架构字段设置为ID?

时间:2012-04-27 14:53:15

标签: mongodb mongoose

给出以下架构:

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,但这对我来说并不干净。

任何?

1 个答案:

答案 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 fieldtoObject()来电中设置var obj = doc.toObject({ virtuals: true }); var json = doc.toJSON({ virtuals: true }); 选项:

{{1}}