当{req.params.id无法删除时,如何修复猫鼬模型的deleteOne()函数?

时间:2019-02-18 03:25:42

标签: javascript node.js mongodb mongoose

首先要提到的是,我绝对不熟悉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上运行它。

某些线索将意味着巨大的帮助。非常感谢您的努力。

2 个答案:

答案 0 :(得分:1)

deleteOne不返回已删除的文档。它总是删除第一个匹配的文档,并返回带有布尔值的已删除文档数。

从mongodb docs deleteOne:

  

返回:

     
      
  1. 一个文档,其中包含:一个布尔值,如果操作运行时带有写关注点,则确认为true;如果写关注是,则确认为false   禁用

  2.   
  3. deletedCount包含已删除文档的数量

  4.   

从猫鼬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
});
...