首页 > 解决方案 > findByIdAndDelete 实际上并没有删除文档,只是将每个键的值设为空

问题描述

新手在这里使用 node.js/express 中的 mongoose 和 MongoDB 来尝试构建我自己的婚礼网站。我的 app.js 中有:

var Guest           =       require("./models/guest");

...

app.delete("/guests/:id", (req, res)=>{
    Guest.findByIdAndDelete(req.params.id, (err, deletedGuest)=>{
        if(err){
            console.log(err);
            res.redirect("/guests");
        } else {
            console.log("deleted: " + deletedGuest);
            res.redirect("/guests");
            
        }
    })
})

与模型

var mongoose = require("mongoose");

var guestSchema = new mongoose.Schema({
    name: String,
    email: String,
    isComing: Boolean,
})

module.exports = mongoose.model("Guest", guestSchema);

还有一个客人的 html 表格,每个客人旁边都有一个删除按钮。因此,如果我尝试通过单击客人姓名旁边的按钮来删除客人,会发生什么情况,它会将客人的姓名、电子邮件和 isComing 设置为空,但不会删除它。换句话说,对于客人:

{ "_id" : ObjectId("5ef811d5ea932d06d38537f5"), "name" : "Steve Stevenson", "email" : "steve@steve.com", "isComing" : true, "__v" : 0 }

如果我按“删除”,我会得到:

{ "_id" : ObjectId("5ef811d5ea932d06d38537f5"), "name" : null, "email" : null, "isComing" : null, "__v" : 0 }

ID 保持不变,它只是从其他键中删除所有值,“__v”字段除外。(顺便说一句,我也不知道那是什么)。控制台中没有记录任何内容 - 没有错误或已删除来宾。知道我做错了什么吗?也欢迎其他一般性建议-我正在尝试在这里学习。

标签: node.jsmongodbexpressmongoose

解决方案


原来问题是我忘了设置方法覆盖。所以它只是用那个 ID 发送一个空白的 post 请求——因此每个键都是空值。哎呀。


推荐阅读