通过subdocumentId从子文档数组中删除元素

时间:2015-02-17 07:54:35

标签: arrays mongodb mongoose subdocument

所以我有以下架构:

var questionsSchema = new Schema({
        nr: Number,
        points: Number,
        description: String,
        groups: [{
            type: Schema.Types.ObjectId,
            ref: 'Group',
            default: []
        }],
        createdOn: {type: Date, default: Date.now()},
        isActive: {type: Boolean, default: true}
    });

var roundSchema = new Schema({
        name: String,
        index: Number,
        questions: [ questionsSchema ]
    });

现在我有一个操作来删除问题(问题是唯一的)而没有圆(父)_id。

我看了here关于如何从数组中提取元素的方法,但是我无法找到正确的方法来执行此操作,在链接中它是一个数组非文件,以便与我的情况有所不同。

我尝试过的事情:

function removeQuestionById(req, res) {
        Round.update({"questions._id": req.params.id}, {$pull: {"questions._id": req.params.id}}, function(err, rowsAffected){
            if(err){
                res.sendStatus(500);
                return console.log("An error occured when trying to remove a question!", err);
            }
            console.log("Amount of rows affected was " + rowsAffected);
            return res.end();
        })
    }

没有用,所以我假设我只需要在update语句中指定子文档的字段:

function removeQuestionById(req, res) {
        Round.update({"questions._id": req.params.id}, {$pull: {"_id": req.params.id}}, function(err, rowsAffected){
            if(err){
                res.sendStatus(500);
                return console.log("An error occured when trying to remove a question!", err);
            }
            console.log("Amount of rows affected was " + rowsAffected);
            return res.end();
        })
    }

同样没有用,我在两种情况下影响的行数都是0。 在过去的几个小时里,我已经尝试过其他一些事情,但都没有奏效。

注意:请求对象中的_id问题是正确的。

1 个答案:

答案 0 :(得分:0)

我终于让它工作了,但我确实要求父_id执行此操作:

Round.update({"_id": req.params.roundId}, {$pull: {"questions": {"_id": req.params.questionId}}},function cb(err) {
            if(err){
                res.sendStatus(500);
                return console.log("An error occured when trying to remove a question!", err);
            }
            return res.end();
        });

如果有人知道如何在不需要parentId的情况下做到这一点,请告诉我们。

编辑:找到它,只需将_id替换为questions._id,然后替换正确的参数值