Mongoose/Angular/Node:使用 deleteOne 方法的路由一直说对象已删除,但删除计数为零

Posted

技术标签:

【中文标题】Mongoose/Angular/Node:使用 deleteOne 方法的路由一直说对象已删除,但删除计数为零【英文标题】:Monggose/Angular/Node: route with deleteOne method keeps saying object is deleted but the deletecount is zero 【发布时间】:2020-04-09 01:37:16 【问题描述】:

我已经看到其他有关此问题的帖子,但我无法根据我的问题调整他们的解决方案:我有一个使用猫鼬的小型 MEAN 应用程序。当我尝试删除存储在集合中的用户或其他对象时,会出现此问题。该路线工作正常,我没有收到任何错误,但对象没有被删除,我不明白。我一遍又一遍地重新安装了猫鼬,尝试了其他方法,比如findByIdAndDelete,但什么都没有……有人可以帮忙解决这个问题吗? 这里有相关代码:

模型文件:

const mongoose = require('mongoose');

const movieSchema = mongoose.Schema(

  name: 
    type: String,
    index:true,
    required: true
  ,
  rate: 
    type: String,
    required: true
  
);

module.exports = mongoose.model('Movie', movieSchema);

模型路线:

router.delete("/:id", (req, res, next) => 
  Movie.deleteOne(
    _id: req.params._id
  ).then(result => 
    res.status(200).json(
      message: "Movie deleted!",
      movie:result
    );
  );
);

电影服务(角度)

deleteMovie(id:any)
  return this.http.delete(baseUrl + 'movie/' + id)

电影组件.ts

deleteMovie(id)

  this.movieService.deleteMovie(id).subscribe(data=>
    console.log(data)
    this.movieService.getStoredMovies();
  )

html

<ul *ngFor="let movie of storedMovies | unique; let i=index">
              <li *ngIf="i<=10 " (click)="deleteMovie(movie)">
                movie.name
              </li>
            </ul>

删除后来自后端的消息:

获取对象方法的日志

【问题讨论】:

【参考方案1】:

问题在于您的Model Route,特别是_id: req.params._id

根据你的路线

router.delete("/:id", (req, res, next) =>  )

您收到的是id 而不是_id

所以你必须从_id: req.params.id 这样的参数中获取id

你的最终结果应该是这样的

router.delete("/:id", (req, res, next) => 
  Movie.deleteOne(
    _id: req.params.id
  ).then(result => 
    res.status(200).json(
      message: "Movie deleted!",
      movie:result
    );
  );
);

更新

我还查看了您的 HTML,发现您正在通过 (click) 传递整个 movie 对象。但是deleteMovie(id)只想要id,所以你必须像这样更新你的HTML

<ul *ngFor="let movie of storedMovies | unique; let i=index">
              <li *ngIf="i<=10 " (click)="deleteMovie(movie._id)">
                movie.name
              </li>
            </ul>

【讨论】:

以上是关于Mongoose/Angular/Node:使用 deleteOne 方法的路由一直说对象已删除,但删除计数为零的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份