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有三种方式(不使用,动态使用,静态使用,默认是动态使用)