首先要提及,我对Node.js和mongodb绝对新手。
我正在使用node.js和mongodb编码后端API,这些API将处理get,post,post,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)检查它实际上是否包含实际的邮政为并发现它可以。我还通过检查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(结果)线应在终端中打印一些结果,但不是,因此不会删除DB中的集合。
i`是在Ubuntu 16.04 LTS PC上运行它。
一些线索意味着很大的帮助。非常感谢您的友好努力。
deleteOne
不返回已删除的文档。它始终删除第一个匹配的文档并返回带有布尔值的文档数量。
来自mongodb docs deleteone:
返回:
包含的文件:一个布尔值,如果操作以写入问题或虚假的话,则被认为是正确的 禁用
deletedCount包含已删除文档的数量
来自猫鼬 docs
删除了与条件匹配的第一个文档 收藏。行为诸如remove(),但最多删除一个文档 无论单个选项如何。
我正面临完全相同的情况,我解决了返回deleteone promise对象,然后使用承诺的属性。这样的东西:
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
});
...