麻烦在Mongoose模式中选择对象

时间:2017-12-14 17:40:52

标签: node.js mongodb mongoose enums

目前正在构建一个应用程序,用户可以在本地或通过谷歌登录(将扩展到其他社交网站)。我使用枚举数组来保存可能的登录方法。我的用户架构如下所示:

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: [] } }

0 个答案:

没有答案