繁体   English   中英

猫鼬查询-删除以子文档值为条件的文档

[英]Mongoose query - remove document conditional on subdocument value

我试图删除“挑战”集合中的文档,但是仅当用户在具有管理员角色的挑战的参与者列表中时才删除。

我当前的代码日志challenge deleted ,但是实际上并未删除挑战。

这是挑战模式:

var challengeSchema = mongoose.Schema({
    name : {type: String, required: true},
    description : {type: String, required: true},
    startDate: {type: Date, required: true},
    endDate: {type: Date, required: true},
    creationDate: {type: Date, required: true},
    goalType : {type: String, required: true},
    goalAmount: {type: Number, required: true},
    participants : {type : [], required: true},
    categories : {type: [String], required: true}
});

下面是查询的当前尝试,其中Challenge是模型变量:

    Challenge.findOne({"_id" : req.params.challengeId, "participant" : {
        $elemMatch : {participantID : req.user.id, participantRole : "admin"}
    }}).remove(function(err, challenge){
        if (err){
            console.log(err);
            res.redirect('/user/dashboard');
        }
        if (!challenge){
            console.log("no challenge found");
            res.redirect('/user/dashboard');
        }
        else {
            console.log("challenge deleted");
            res.redirect('/user/dashboard');
        }
    })

使用findOneAndRemove代替findOne。 像这样:

Challenge.findOneAndRemove({"_id" : req.params.challengeId, "participant" : {
    $elemMatch : {participantID : req.user.id, participantRole : "admin"}
}},function(err, challenge){
    if (err){
        console.log(err);
        res.redirect('/user/dashboard');
    }
    if (!challenge){
        console.log("no challenge found");
        res.redirect('/user/dashboard');
    }
    else {
        console.log("challenge deleted");
        res.redirect('/user/dashboard');
    }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM