首先要提到的是,我绝对不熟悉Node.Js和MongoDB。
我正在用Node.Js和MongoDB编码后端API,这将处理来自前端的GET,POST,DELETE请求,这很简单。
在使用DELETE功能时,我陷入了困境。
这是我的 posts.service.ts 文件,其中包含此 deletePost()函数,该函数将postId发送到后端 app.js 文件。
`
deletePost(postId: string) {
this.http.delete('http://localhost:3000/api/posts/' + postId)
.subscribe(() => {
console.log(postId);
console.log('Deleted');
});
}
`
我添加了这个 console.log(postId)来检查它是否实际上包含实际的postId并发现确实存在。我还通过检查mongo shell将其与MongoDB中的真实ID相匹配。
这是后端 app.js 文件中的 delete()函数,应执行实际任务。
`
app.delete("/api/posts/:id", (req, res, next) => {
Post.deleteOne({ _id: req.params.id }).then(result => {
console.log(result);
res.status(200).json({message: "Post deleted"});
});
});
`
console.log(result)行应在终端上显示一些结果,但是不会,因此不会删除数据库中的集合。
我正在Ubuntu 16.04 LTS pc上运行它。
某些线索将意味着巨大的帮助。非常感谢您的努力。
答案 0 :(得分:1)
deleteOne
不返回已删除的文档。它总是删除第一个匹配的文档,并返回带有布尔值的已删除文档数。
从mongodb docs deleteOne:
返回:
一个文档,其中包含:一个布尔值,如果操作运行时带有写关注点,则确认为true;如果写关注是,则确认为false 禁用
deletedCount包含已删除文档的数量
从猫鼬docs
删除符合条件的第一个文档 采集。行为类似于remove(),但最多删除一个文档 不管是哪个选项。
答案 1 :(得分:0)
我面临着完全一样的问题,我解决了返回deleteOne promise对象,然后使用promise的.then属性。 像这样:
Model.js
...
bicicleSchema.statics.deleteById= function(id, cb){
return this.deleteOne({code: id}, cb);
};
...
module.exports = mongoose.model('Bicicle', bicicleSchema);
Service.js
var Bicicle = require('../../../model/bicicle');
...
const id = req.params.id;
Bicicle.deleteById(id).then(()=>{
//your code
});
...