我使用nodeJS MongoDB / Mongoose使用Postman发布/删除方法在数据库内创建/更新/删除电影。 创建功能工作正常,甚至删除功能都正常工作,所以当我使用Postman时,我得到了返回:"电影已被删除!"喜欢它。
唯一的问题是我的功能是清空整个电影数据库,而不仅仅是那部电影,这里是删除功能:
function destroy(req, res, next){
var movieID = req.body
Movie.remove(movieID, function(err,movie){
if(err){
res.status(400).send(err)
} else {
res.send("Movie has been deleted!")
db.close()
}
})
电影对象:
var movieSchema = new mongoose.Schema({
name: String,
yay: Number,
nay: Number,
release_date: Date,
in_theaters: Boolean,
released: Boolean,
buy_link: String,
imdb_link: String,
image_url: String,
description: String,
trailer_link: String
})
我想删除基于它的电影"名称"所以我只需要输入名称,它就会删除整部电影。
答案 0 :(得分:1)
您是否尝试过findOneAndRemove查询?
与查找模型并在回调中删除模型相比,此查询更清晰。除此之外,我认为它更快,因为你基本上做了1个查询而不是2个。
答案 1 :(得分:0)
你能试试吗?
var movieName = req.body.name;
Movie.find('name': movieName, function(err, movie) {
if (err) res.send({error: err});
Movie.remove(function(err, movie){
if (err) res.send({error: err});
res.json({message: "Movie is removed", movie: movie});
});
});
答案 2 :(得分:0)
如果要将直接值传递给Remove方法,它将尝试与_id字段匹配。
根据您的模型,_id是ObjectId字段,由mongodb自动管理。
如果你输入这样的话。 .remove("movie", callback)
,它不是有效的ObjectId。
Mongoose正在丢弃此无效条件并执行Movie.remove({});这是删除所有记录。
因此最好在直接传递给Movie.remove()之前验证输入是否有效;
我还建议像这样使用:Movie.remove({_id: movieId}, callback)
。
对于电影名称:
Movie.remove({name: movieName}, callback);
更新: 你可以从Postman那里拿走
var movieName = req.body.movieName;
Movie.remove({name: movieName}, function(err, updateObj){
});