В моей схеме у меня есть два массива с пользователями, приглашенными пользователями и объединениями. Приглашенные массив создается из тела запросаНевозможно вытащить из массива мангустов
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
}
@JohnnyHK уверен, я отредактировал мой вопрос. – vitalym
Проблема, вероятно, в том, что '_id' в' inviteUsers' является строкой, а 'req.user._id' является ObjectId. Попробуйте 'var update = {$ pull: {inviteUsers: {_id: req.user._id.toString()}}};'. – victorkohl
Есть ли причина, по которой вы определяете 'joinUsers' как просто' Array' вместо массива таких пользователей, как '[userSchema]'? Он должен начать работать, если вы это сделали. – JohnnyHK