如何使用猫鼬/Node.删除数组中的项目



所以我已经阅读并尝试为此实现其他解决方案。我只是想深入了解为什么它对我不起作用。这是我的第一个后端工作项目。我正在学习一门课程,但想自己尝试一些东西来坚持这些概念。

这是我的架构

//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");
            }
        });
});

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

我认为

问题是 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

希望对你有帮助

最新更新