2016-05-19 10 views
0

私は、Postmanのポスト/削除方法を使って、データベース内のムービーを作成/更新/削除するためにnodeJS MongoDB/Mongooseを使用しています。 作成機能が正常に動作しています。削除機能も正常に動作していますので、郵便番号を使用すると「ムービーが削除されました!それはすべきです。nodeJS + MongoDB + Mongoose - 削除できないエントリ1件

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 
}) 

唯一の問題は私の機能だけではなく、その1本の映画の映画のデータベース全体を空にしていることで、ここでremove関数であります私はその名前に基づいて映画を削除したいので、名前を入力するだけで映画全体が削除されます。

+0

これは正しいですか?movieID = req.body?私はそれがこのようなものだと思う:var movieID = req.body.movi​​eID; –

+0

db.close()の前に、console.log(movie)という行を1行追加します。 movieにn:1が含まれている場合、DBから1レコードが削除されます。それは0であり、何も起こらない。 –

+0

また、mongooseのデバッグモードを有効にすることもできます。mongoose.set( 'debug'、true);すべてのクエリをmongodbに出力します。 –

答えて

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}); 
     }); 

    }); 
+0

これは、データベース内のすべてのムービーも削除します。 –

+0

私は自分の答えを更新しました。それもテストしていただけますか? – erolkaya84

+0

は、それは私を与える「が見つかりません」、それを試してみました前に私は、次の操作を行うために郵便配達を使用する場合: { 「名前」:「キャプテン・アメリカ:南北戦争」 } –

0

直接値をRemoveメソッドに渡す場合は、_idフィールドとの一致を試みます。

モデルごとに、_idはmongodbによって自動的に管理されるObjectIdフィールドです。 このように入力した場合。 .remove("movie", callback)は有効なObjectIdではありません。

マングースはこの無効な条件を破棄し、Movie.remove({})を実行しています。すべてのレコードを削除しています。

したがって、Movie.remove()に直接渡す前に、入力が有効なObjectIdであるかどうかを検証する方が良いです。

私はまた、このように使用することをお勧めします:Movie.remove({_id: movieId}, callback)。 そして、映画の名:

Movie.remove({name: movieName}, callback); 

更新:あなたはfindOneAndRemoveクエリを試してみました あなたはポストマン

var movieName = req.body.movieName; 

Movie.remove({name: movieName}, function(err, updateObj){ 
}); 
関連する問題