当Req.params.ID未删除Mongoose模型时,如何固定DeleteOne()函数



首先要提及,我对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:

返回:

  1. 包含的文件:一个布尔值,如果操作以写入问题或虚假的话,则被认为是正确的 禁用

  2. 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
});
...

最新更新