无法从Mongoose中的Array中删除元素

时间:2016-02-22 22:42:53

标签: javascript node.js mongodb mongoose

我正在尝试从mongoose中的数组模型中通过其_id删除元素。相同的技术在我的代码中的其他地方工作,但在这里它无法删除元素。经过几个小时的尝试改变它的各个部分,我终于在这里发布了,因为可能是我睡眠不足是主要原因。谁能找出我做错了什么?

ABC.findOne({
    'user': new ObjectId(req.decoded._id),
    'activity.ride': new ObjectId(id)
}, {
    'activity.$': 1
}, function(err, doc) {

    if (doc !== null) {
        for (var j = 0; j < doc.activity.length; j++) {
            var request = JSON.parse(JSON.stringify(doc.activity[j]));
            doc.activity.remove(request._id);
            doc.save();
        }
    }
});

这是模型:

var activityItem = mongoose.Schema({
    timestampValue: Number,
    xabc: String,
    full: Boolean,
    comp: Boolean
});

var ABC = mongoose.Schema({
    activity: [activityItem],
    user: {
        type: mongoose.Schema.ObjectId,
        ref: 'User'
    },
    username: String
});

1 个答案:

答案 0 :(得分:1)

$pull运算符从现有数组中删除与指定条件匹配的值的所有实例。并通过findOneAndUpdate

从数组中删除元素
ABC.findOneAndUpdate({'user': new ObjectId(req.decoded._id)},
                    {$pull: {activity: {_id: request._id}}},
                    {new: true},
                    function(err, a) {
                        if (err)
                            console.log(err);
                        else
                            console.log(a);
                    });

顺便说一句,我在ride架构中找不到activityItem,因此我从查询条件中删除了ride