2017-05-10 178 views
0

我正在使用passport.js,我想更新当前登录成员的配置文件并将其保存到数据库。现在我正在使用保存,但我担心这会在别人同时修改此配置文件时导致问题。相反,我想使用MongoDB的upsert功能。更新成员在猫鼬

function updateProfile(req, res) { 
    var user = req.user 
    var form = req.body 
    var profile = { 
     name: form.profileRealName, 
     bio: form.profileBio, 
     url: form.profileUrl, 
     location: form.profileLocation 
    } 

    user.profile = profile 
    logger.info(user) 

    user.save(function(err) { 
     if(err) 
      next(err) 
     else 
      res.redirect(302, '/settings/profile') 
    }) 
} 

其实这并没有引发错误,但在数据库中的文件尚未改变。

我的问题:

什么是UPSERT我登录的用户的最佳方法是什么?

回答

0

您应该传递用户的_id并使用它在数据库中查找以更新指定的文档。

function updateProfile(req, res) { 
    var options = { 
        upsert : true, 
        new : true 
       } 
    var user = req.body._id 
    var form = req.body 

    db.User.findOneAndUpdate({_id: user}, form, options, (err, user) => { 
    if(err) { 
     res.json(err) 
    }else{ 
     res.json(user) 
     console.log('details: %s', user); 
    } 
    }) 
} 
+0

我已经重写了一下,现在它抛出的“user”没有为回调参数'(err,user)'定义。这是我的代码:http://i.imgur.com/fJeU6Ur.png – kentor

+0

@kentor看起来像是未定义的,因为它没有在您的查询中找到用户,或者userId未定义。尝试将用户标识设置为'var userId = req.body._id',您应该传递身份标识值。或者,如果你在params中传递id,它将是'var userid = req.params.id' – mrtaz