Monggose/Angular/Node:使用 deleteOne 方法的路由一直说对象已删除,但 deletecount 为零
Monggose/Angular/Node: route with deleteOne method keeps saying object is deleted but the deletecount is zero
我看过有关此问题的其他帖子,但我无法调整他们的解决方案来解决我的问题:我有一个使用 mongoose 的小型 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
});
});
});
电影服务(angular)
deleteMovie(id:any){
return this.http.delete(baseUrl + 'movie/' + id)
}
电影component.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>
删除后来自后台的消息:
获取对象方法的日志
问题出在您的 Model Route
,特别是 _id: req.params._id
。
根据你的路线
router.delete("/:id", (req, res, next) => { })
您收到的是 id
而不是 _id
所以你必须从这样的参数中得到 id
_id: req.params.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 的小型 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
});
});
});
电影服务(angular)
deleteMovie(id:any){
return this.http.delete(baseUrl + 'movie/' + id)
}
电影component.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>
删除后来自后台的消息:
获取对象方法的日志
问题出在您的 Model Route
,特别是 _id: req.params._id
。
根据你的路线
router.delete("/:id", (req, res, next) => { })
您收到的是 id
而不是 _id
所以你必须从这样的参数中得到 id
_id: req.params.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>