2015-05-07 2 views
0

В моей схеме у меня есть два массива с пользователями, приглашенными пользователями и объединениями. Приглашенные массив создается из тела запросаНевозможно вытащить из массива мангустов

invitedUsers: req.body.invitedUsers 

Зарегистрирован массив обновляется, когда пользователь щелкает «Join»

$addToSet: {joinedUsers: req.user} 

Затем я могу вытащить пользователя из joinedUsers массива, выполняя

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

Однако, Я не могу вытащить из массива приглашенных пользователей, хотя пользовательский объект тот же. Вот полный код:

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 не меняется, так как если мангуст не удается найти его. Что может быть решением этого?

Update

определение события схемы, в соответствии с просьбой:

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

Проблема, вероятно, в том, что '_id' в' inviteUsers' является строкой, а 'req.user._id' является ObjectId. Попробуйте 'var update = {$ pull: {inviteUsers: {_id: req.user._id.toString()}}};'. – victorkohl

+0

Есть ли причина, по которой вы определяете 'joinUsers' как просто' Array' вместо массива таких пользователей, как '[userSchema]'? Он должен начать работать, если вы это сделали. – JohnnyHK

ответ

0

Проблема заключалась в том, потому что _id в invitedUsers является строка и req.user._id является ObjectId.

Вызов toString() на _id будет решить:

var update = {$pull: {invitedUsers: {_id: req.user._id.toString()}}}; 
Смежные вопросы