如何使用Mongoose / Node.js删除数组中的项目

时间:2018-03-14 14:03:08

标签: javascript node.js mongodb express mongoose

因此,我已阅读并尝试为此实施其他解决方案。我只想弄清楚为什么它不适合我。这是我的第一个后端工作项目。我正在通过一门课程,但我想自己尝试一些方法来使概念坚持下去。

这是我的架构



//ANIMAL
var animalSchema = new mongoose.Schema({
    image: String,
    name: String,
    variety: String,
    DOB: Date,
    logs: [{
        amount: Number,
        notes: String,
        dateMilked: Date
    }],
    created: { type: Date, default: Date.now }
});




到目前为止,除了删除日志之外,我还设法让动物和日志的所有RESTful路由工作。

这就是我所拥有的,但它不会删除任何内容 - 它也不会抛出任何错误。



app.delete("/animals/:id/logs/:id", function(req, res) {
    Animal.findOneAndUpdate({ 'logs._id': req.params.id }, {
            $pull: {
                "logs": { "_id": req.body.id }
            }
        }, { safe: true, multi: true },
        function(err, foundAnimal) {
            if (err) {
                console.log(err);
                res.redirect("/");
            }
            else {
                res.redirect("/animals/" + foundAnimal._id + "/logs");
            }
        });
});




任何帮助或见解都会很棒!!我正在学习!

1 个答案:

答案 0 :(得分:0)

我认为问题是req.body.id可能没有任何值,因为你在路径中发送两个id。 如果你称他们为app.delete(“/ animals /:id / logs /:id”),我很确定req.params.id会有两个值中的一个,但你不会是能够得到另一个。

您应该使用不同的名称来调用它们,例如:

app.delete("/animals/:animalId/logs/:logId",

然后您可以访问这两个变量而不会发生任何冲突:

req.params.animalId
req.params.logId

希望有所帮助