2013-12-20 9 views
13

私はmongoDBを新しくしてNode.jsを経験していないので、以下のコードが完璧ではない場合はご容赦ください。node.jsからmongodbコレクションから文書を取り除く

目的は、_idによって参照されるコレクションからドキュメントを削除することです。削除は(mongoシェルでチェックされて)行われますが、コードは終了しません(node myscript.jsを実行してもシェルが元に戻りません)。 db.close()を追加すると{ [MongoError: Connection Closed By Application] name: 'MongoError' }と表示されます。

var MongoClient = require("mongodb").MongoClient; 
var ObjectID = require("mongodb").ObjectID; 

MongoClient.connect('mongodb://localhost/mochatests', function(err, db) { 
    if (err) { 
     console.log("error connecting"); 
     throw err; 
    } 
    db.collection('contacts', {}, function(err, contacts) { 
     if (err) { 
      console.log("error getting collection"); 
      throw err; 
     } 
     contacts.remove({_id: ObjectID("52b2f757b8116e1df2eb46ac")}, {safe: true}, function(err, result) { 
      if (err) { 
       console.log(err); 
       throw err; 
      } 
      console.log(result); 
     }); 
    }); 
    db.close(); 
}); 

接続を閉じる必要はありませんか?私はそれを閉じていないと、プログラムが終了しないときに何が起こっているのですか?

ありがとうございます!非同期スタイルに

+2

何も起こりません、あなたのプログラムは、ちょうどモンゴドライバからいくつかのI/Oを待っています。もちろん、あなたは何も届かず、何も送ってこないことを知っていますが、ノードはこれを知らず、それで終了できません。 – kamituel

答えて

18

ようこそ:

  • あなたは、コールバックのためのスローを使用してはならない、スローは取り外しが行われた後、コールバックであるべき機能スタック
  • db.close()のために良いです。

例:

MongoClient.connect('mongodb://localhost/mochatests', function(err, db) { 
    db.collection('contacts', {}, function(err, contacts) { 
     contacts.remove({_id: ObjectID("52b2f757b8116e1df2eb46ac")}, function(err, result) { 
      if (err) { 
       console.log(err); 
      } 
      console.log(result); 
      db.close(); 
     }); 
    }); 
}); 
+0

これはうまくいきました、ありがとう:) – marc0s

+0

それは動作しますが、私はあなたがなぜ呼び出す必要があるのか​​理解したいと思います。 – Jeep87c

関連する問題