【发布时间】:2018-04-23 15:34:54
【问题描述】:
我是 Mongo DB/Mongoose 的新手,在尝试将用户 ID 添加到不同的架构时遇到了问题。首先这是我的用户模式,它按预期工作:
const userSchema = new Schema({
email:{
type:String,
unique:true,
lowercase:true,
trim:true,
validate:[
validator.isEmail,'Invalid email address'
],
required:'Please supply an email address'
},
name:{
type:String,
trim:true,
required:'Please supply a name'
},
userType:{
type:String,
required:'Please supply a user type'
},
teams:{
type:Array
}
});
userSchema.plugin(passportLocalMongoose,{usernameField:'email'});
userSchema.plugin(mongodbErrorHandler);
module.exports = mongoose.model('User',userSchema)
其次是我的团队架构,其中从通过用户架构创建的用户获取的 _id 出于某种原因存储为稍微不同的值:
const teamSchema = new Schema({
owner:{
type:String,
required:'Please submit a user id'
},
members:[
{
id:String,
email:String,
role:String,
inviteToken:String,
inviteTokenExpires:String
}
],
teamSlotsAllowed:{
type:Number
}
});
module.exports = mongoose.model('Team',teamSchema);
在 Node 中,我像这样创建一个新用户:
const user = new User({
email:req.body.email,
userType:userType,
name:req.body.name
})
const register = promisify(User.register,User);
await register(user,req.body.password);
我调用下一个将它们分配给团队的中间件:
const user = await User.findOne({email:req.body.email});
const team = new Team({
owner: user._id,
members: [
{
userID:user._id,
email:user.email,
role:'owner',
inviteToken:'',
inviteTokenExpires:''
}
],
teamSlotsAllowed: 14
});
let newTeam = await team.save();
user.teams = newTeam._id;
await user.save();
使用团队架构,所有者属性实际上存储了与用户架构的 _id 匹配的正确值。但是在 members 数组中,用户 ID 与正确的 ID 略有不同。例如,如果 _id 以 24bcc 结尾,它将作为 24bcd 存储在 members.userID 中 - 喜欢它出于某种原因而递增吗?
谁能告诉我哪里出错了?
【问题讨论】:
-
你应该引用另一个类似这样的架构stackoverflow.com/a/18002078/5532806
标签: javascript node.js mongodb mongoose