nodeJS + MongoDB + Mongoose - 无法删除1个条目

时间:2016-05-19 09:09:03

标签: node.js mongodb mongoose

我使用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
})

我想删除基于它的电影"名称"所以我只需要输入名称,它就会删除整部电影。

3 个答案:

答案 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){
});