Mongoose没有保存正确的架构

时间:2017-07-13 22:57:43

标签: javascript node.js mongodb express mongoose

我有一个小项目介绍自己的一些前端技术。我正在使用Node,Express,Pug和MongoDB。

我在user.js文件中定义用户架构:

var userSchema = mongoose.Schema({

  username : String,
  password : String,
  jobs : [{ type: mongoose.Schema.Types.Mixed }]

});

然后,在我的passport.js文件中,我开始注册过程。

      User.findOne({ 'username' :  username }, function(err, user) {
        // if there are any errors, return the error
        if (err) {
          console.log(err);
          return done(err);
        }

        // check to see if theres already a user with that email
        if (user) {
          console.log('user exists');
          return done(null, false, req.flash('signupMessage', 'That username is already taken.'));
        } else {
          console.log('creating new user...');
          // if there is no user with that email
          // create the user
          var newUser = new User();

          newUser.username = username;
          newUser.password = newUser.generateHash(password);
          newUser.jobs = [{ website: 'google.com' }];

          // save the user
          newUser.save(function(err) {
            if (err) {
              console.log(err);
              throw err;
            }
            console.log('user saved: ', newUser);
            return done(null, newUser);
          });
        }
      });

该帖子成功将新用户保存为:

{
    "_id": {
        "$oid": "5967d2acc64d953330a3ac32"
    },
    "__v": 0
}

我的目标是在数据库中有一个数组,可以将网站链接推送到该用户的数组中。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

将作业字段类型设置为混合数组:

var userSchema = mongoose.Schema({
  local: { username : String, password : String },
  jobs: [ { type: mongoose.Schema.Types.Mixed } ]
});

然后创建将所有参数传递给构造函数的用户:

var newUser = new User({
  local: {
    username: username,
    password: User.generateHash(password),
  },
  jobs: [{ website: 'google.com' }]
});

// save the user
newUser.save(function(err) {
  if (err) {
    console.log(err);
    throw err;
  }
  console.log('user saved: ', newUser);
  return done(null, newUser);
});

您还可以在不首先实例化的情况下创建用户:

// save the user
User.create({
  local: {
    username: username,
    password: User.generateHash(password),
  },
  jobs: [{ website: 'google.com' }]
}, function(err, newUser) {
  if (err) {
    console.log(err);
    throw err;
  }
  console.log('user saved: ', newUser);
  return done(null, newUser);
})

对于这两种方法,您可能需要将generateHash设为static method