Mongodb Mongoose:如何将模式字段设置为ID?
给定以下模式:Mongodb Mongoose:如何将模式字段设置为ID?,mongodb,mongoose,Mongodb,Mongoose,给定以下模式: var UserSchema = new Schema({ , email : { type: String } , passwordHash : { type: String } , roles : { type: [String] } }); 我希望电子邮件成为关键。 我如何定义这一点 我可以做到: var UserSchema = new Schema({ , _id: { type: String } ,
var UserSchema = new Schema({
, email : { type: String }
, passwordHash : { type: String }
, roles : { type: [String] }
});
我希望电子邮件成为关键。
我如何定义这一点
我可以做到:
var UserSchema = new Schema({
, _id: { type: String }
, passwordHash : { type: String }
, roles : { type: [String] }
});
因此MongoDB会将其识别为id字段,并修改我的代码以引用\u id
,而不是电子邮件
,但我觉得这并不干净
有人吗?因为您使用的是Mongoose,一个选项是使用电子邮件字符串作为\u id
字段,然后添加一个名为的电子邮件,该电子邮件返回\u id
,以清除使用电子邮件的代码
var userSchema=新模式({
_id:{type:String},
密码哈希:{type:String},
角色:{type:[String]}
});
userSchema.virtual('email').get(函数(){
返回此。\u id;
});
var User=mongoose.model('User',userSchema);
User.findOne(函数(err,doc){
console.log(doc.email);
});
请注意,在将Mongoose文档转换为普通JS对象或JSON字符串时,默认情况下不包括虚拟字段。要包含它,您必须在or调用中设置virtuals:true
选项:
var obj=doc.toObject({virtuals:true});
var json=doc.toJSON({virtuals:true});
我认为你最好把id作为ObjectID,让电子邮件成为一个独特的索引。这是普遍的共识吗?将域Id设置为唯一,并让MongoDB处理技术Id?由于您使用的是Mongoose,另一种选择是使用电子邮件字符串作为_Id字段,然后添加一个返回_Id的命名“电子邮件”,以清理使用电子邮件的代码。为了使答案更完整,我添加了更多关于虚拟字段的详细信息——这似乎是一个常见的问题。看起来编辑被@SmartyTwiti拒绝了。虽然这个概念很好,但我还是加入了这个信息。谢谢