目前正在构建一个应用程序,用户可以在本地或通过谷歌登录(将扩展到其他社交网站)。我使用枚举数组来保存可能的登录方法。我的用户架构如下所示:
const userSchema = new Schema({
method :{
type: String,
enum: ['local', 'google', 'twitter'],
required: true
},
local: {
email: String,
username: String,
password: String,
projects: [
{
projectName: String,
sessionLength: Number,
timestamp: Date
}
]
},
google: {
googleId: String,
email: String,
username: String,
projects: [
{
projectName: String,
sessionLength: Number,
timestamp: Date
}
]
}
});
const User = mongoose.model('user', userSchema);
module.exports = User;
以下代码用于创建新用户,并在经过Google身份验证后保存到数据库中。
let newUser = new User({
method: 'google',
google: {
googleId: profile.id,
email: profile.emails[0].value,
username: profile.name.givenName
}
});
我的问题是,newUser包含正确的google对象,本地'具有项目数组的对象。以下是newUser的外观。我不希望它包含本地对象。它似乎只出现在projects属性是一个数组时,如果将项目设置为字符串,则按预期工作。我究竟做错了什么?
{ method: 'google',
_id: 5a32aaa4c665b062df9c0d00,
google:
{ googleId: 'randomgoogleId',
email: 'name@gmail.com',
username: 'name',
projects: [] },
local: { projects: [] } }