Mongoose没有将数据保存到mLab

时间:2017-07-15 17:02:51

标签: node.js mongodb express mongoose passport-local

在多次尝试纠正我的逻辑失败后,我求助于求助。

我使用Node,Express,Passport,Mongoose,MongoDB来创建应用程序。到目前为止,用户可以注册并登录。当用户注册时,它们由此架构定义:

 $routes->connect('/', ['controller' => 'Pages', 'action' => 'index','index']);

通过以下方式保存用户:

var userSchema = mongoose.Schema({

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

});

这导致了这个MongoDB文档:

  var newUser = new User();

          // set the user's local credentials
          newUser.local.username = username;
          newUser.local.password = newUser.generateHash(password);
          newUser.jobs = [];
          // 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": "596a436a2981ab1729a4f08b"
    },
    "local": {
        "password": "$2a$08$TV2rADNbm302cREGRzfRFOtZF4mA8kYCeBjcmalPCk./flUO3wM.6",
        "username": "kev"
    },
    "__v": 0
}

时,Mongo文档没有变化
  

console.log('用户已更新:',用户);

显示正确的文档。

1 个答案:

答案 0 :(得分:0)

You should use findOneAndUpdate() method of mongodb

    https://docs.mongodb.com/v3.2/reference/method/db.collection.findOneAndUpdate/
    Like that
    var json = {'website': req.body.joblink};

    User.findOneAndUpdate(
       { 'local.username': req.user.username },
        { $push: { jobs: json });

您必须更新架构: -

var userSchema = mongoose.Schema({

      local : {
        username : String,
        password : String,
      },
      jobs : {

        type: Array,
        default: []
       }

    });

更新架构后,当您第一次保存文档时,如果您没有在json中传递作业,它将自动创建一个默认数组。

之后,您可以使用$ push更新作业