node.js - 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”字段除外。(顺便说一句,我也不知道那是什么)。控制台中没有记录任何内容 - 没有错误或已删除来宾。知道我做错了什么吗?也欢迎其他一般性建议-我正在尝试在这里学习。
解决方案
原来问题是我忘了设置方法覆盖。所以它只是用那个 ID 发送一个空白的 post 请求——因此每个键都是空值。哎呀。
推荐阅读
- react-native - 导航到其他屏幕时的 React Navigation 4.x 版本问题
- angular - ng-boostrap:ESC 按键上的模态关闭不起作用
- apache-flink - flink 中是否有官方的 session scheduler 接口允许用户自定义 session 管理?
- javascript - document.getElementById 为空,加载了延迟大小的 iframe
- javascript - 为什么 form.append 不附加多个文件?
- apache-kafka - 卡夫卡消息处理
- javascript - 如何对javascript进行真实检查
- python - 如何检查 Pandas df 行中的元素是否具有等号的值(符号更改后的值)
- html - Highcharts 错误 #13:www.highcharts.com/errors/13 - Angular
- ibm-cloud - 如何查找 API 详细信息,例如 IBM Watson Assistant 的 URL 和凭证