2015-05-07 111 views
0

在我的模式中,我有兩個數組,包括用戶,inviteUsers和joinedUsers。邀請陣列從請求體創建無法從貓鼬陣列中拉出

invitedUsers: req.body.invitedUsers 
用戶點擊通過執行

{$pull: {joinedUsers: {_id: req.user._id}}} 

然而「加入」

$addToSet: {joinedUsers: req.user} 

然後我可以從joinedUsers陣列拉用戶

加入陣列被更新時,雖然用戶對象是相同的,但我無法從受邀用戶數組中獲取數據。下面是完整的代碼:

app.put('/decline/events/:id', function (req, res) { 
    var update = {$pull: {invitedUsers: {_id: req.user._id}}}; 
    console.log(req.user._id); 

    Event.findByIdAndUpdate(req.params.id, update, function (err, event) { 
     if (err) { 
      res.send(err); 
     }; 

     Event.find({}) 
      .populate('owner') 
      .exec(function (err, events) { 
       if (err) { 
        res.send(err); 
       }; 
       res.json(events) 
      }); 
    }); 
}); 

Ajax調用客戶端

$scope.declineInvitation = function (id) { 
     $http.put('/decline/events/' + id) 
      .success(function (data) { 
      }) 
      .error(function (data) { 
       console.log('Error: ' + data); 
      }); 
    }; 

一切順利沒有錯誤,但invitedArray不改變,就好像貓鼬沒有找到它。什麼可能是解決這個問題的方法?

更新

事件模式定義,要求:

var eventSchema = new Schema({ 
    title: {type: String}, 
    description: {type: String, default: ''}, 
    startDate: Date, 
    invitedUsers: {type: Array, default: []}, 
    joinedUsers: {type: Array, default: []}, 
    owner: {type: Schema.Types.ObjectId, ref: 'User'}, 
    created_at: {type: Date, default: Date.now()}, 
    updated_at: {type: Date, default: null}, 
    location: String 
} 
+0

@JohnnyHK肯定的是,我編輯我的問題。 – vitalym

+0

問題可能是因爲'requestedUsers'中的'_id'是一個字符串,'req.user._id'是一個ObjectId。嘗試'var update = {$ pull:{invitedUsers:{_id:req.user._id.toString()}}};'。 – victorkohl

+0

有沒有理由將'joinedUsers'定義爲'Array'而不是像'[userSchema]'這樣的用戶數組?它應該開始工作,如果你這樣做。 – JohnnyHK

回答

0

問題是因爲invitedUsers_id是一個字符串和req.user._id是的ObjectId。

調用上_idtoString()會解決這個問題:

var update = {$pull: {invitedUsers: {_id: req.user._id.toString()}}};