2015-02-11 98 views
0

我在嘗試更新貓鼬模式。基本上我有兩個API'/ follow /:user_id'和'/ unfollow /:user_id'。我想要實現的是每當用戶A跟隨用戶B時,用戶B在貓鼬中的追隨者字段將​​作爲一個增量。同時更新貓鼬模式字段

至於現在我設法只得到以下字段增加一,但不是追隨者領域。

schema.js

var UserSchema = new Schema({ 
    name: String, 
    username: { type: String, required: true, index: { unique: true }}, 
    password: { type: String, required: true, select: false }, 
    followers: [{ type: Schema.Types.ObjectId, ref: 'User'}], 
    following: [{ type: Schema.Types.ObjectId, ref: 'User'}], 
    followersCount: Number, 
    followingCount: Number 

}); 

更新版本:我想我的解決方案,但每當我張貼,它只是獲取數據(我試過郵差Chrome應用API的)。

api.js

// follow a user 



apiRouter.post('/follow/:user_id', function(req, res) { 

     // find a current user that has logged in 
      User.update(
       { 
        _id: req.decoded.id, 
        following: { $ne: req.params.user_id } 
       }, 

       { 
        $push: { following: req.params.user_id}, 
        $inc: { followingCount: 1} 

       }, 
       function(err) { 
        if (err) { 
         res.send(err); 
         return; 
        } 

        User.update(
         { 
          _id: req.params.user_id, 
          followers: { $ne: req.decoded.id } 
         }, 

         { 
          $push: { followers: req.decoded.id }, 
          $inc: { followersCount: 1} 

         } 

        ), function(err) { 
         if(err) return res.send(err); 

         res.json({ message: "Successfully Followed!" }); 
        } 

      }); 
    }); 

這些代碼只設法增加用戶的以下字段,並沒有重複。如何在字段以及其他用戶的關注者字段中同時更新登錄用戶的

更新的版本:它不斷提取數據。

enter image description here

回答

0

可能是你這是怎麼想。而不是使用update,您也可以使用Mongoose查詢中的findOneAndUpdate

apiRouter.post('/follow/:user_id', function(req, res) { 
    User.findOneAndUpdate(
    { 
     _id: req.decoded.id 
    }, 
    { 
     $push: {following: req.params.user_id}, 
     $inc: {followingCount: 1} 
    }, 
    function (err, user) { 

     if (err) 
      res.send(err); 

     User.findOneAndUpdate(
     { 
      _id: req.params.user_id 
     }, 

     { 
      $push: {followers: req.decoded.id}, 
      $inc: {followersCount: 1} 
     }, 
     function (err, anotherUser) { 
      if (err) 
       res.send(err); 

      res.json({message: "Successfully Followed!"}) 
     }); 

    }); 
} 

如果它被更新與否不能確定,你可以只使用console.log()兩個useranotherUser變量看到的變化。

+0

謝謝你的幫助,它不起作用。它只更新以下和以下計數字段,但不關注追隨者和追隨者計數。 – sinusGob 2015-02-11 13:53:30

+0

檢查更新後的版本,我附上了一張圖片 – sinusGob 2015-02-11 13:56:55

+0

當你嘗試'console.log(user)'時,你得到了什麼? – Khay 2015-02-11 14:17:35