无法从猫鼬阵中拉出来

时间:2015-05-07 12:34:11

标签: node.js mongodb mongoose

在我的架构中,我有两个带用户的数组,inviteUsers和joinedUsers。邀请数组是从请求正文

创建的
invitedUsers: req.body.invitedUsers

当用户点击“加入”

时,会更新已加入的数组
$addToSet: {joinedUsers: req.user}

然后我可以通过执行

从joinUsers数组中提取用户
{$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);
            });
    };

一切都没有错误,但inviteArray没有改变,就像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
}

1 个答案:

答案 0 :(得分:0)

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

toString()上拨打_id即可解决问题:

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