无法从猫鼬数组中拉出

Cannot pull from mongoose array

在我的架构中,我有两个包含用户的数组,invitedUsers 和 joinedUsers。邀请数组是从请求正文创建的

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 没有改变,就好像 mongoose 找不到它一样。可能有什么解决方案?

更新

事件架构定义,按要求:

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
}

问题是因为 invitedUsers 中的 _id 是一个字符串,而 req.user._id 是一个 ObjectId。

_id 上调用 toString() 将解决问题:

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