2017-05-10 227 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