2012-05-06 12 views
2

私には2つの質問があります。MongoDBとNodejでdb.openを使用

まず、MongoDBのドキュメントは常にdb.open()を使用して、db.collection()を指し、しかし、私はまだでも最初db.open().を呼び出すことなく、APIと連携することができるよということに気づいたそうすることは安全ですか? APIは内部でdb.open()と呼んでいますか?

http://mongodb.github.com/node-mongodb-native/api-generated/db.html#collection

第二に、db.open()が呼び出されたかどうかを指定dbオブジェクト内のparamがあるのでしょうか?もしそうでなければ、db.open()が呼ばれたらどうすればいいのでしょうか?

私はmongoと通信するいくつかの関数を構築していますが、いくつかの関数が相互に作用すると、データベースが何も開かれないというエラーが発生します。

EDIT

私はdbオブジェクトでこのPARAMを見つけました。これはdb.open()の使用を決めるブールですが、100%確信はありませんが、誰にも分かりますか?私はモンゴと通信いくつかの機能を内蔵しているためdb.serverConfig.internalMaster

答えて

4

dbオブジェクトが接続されているかどうかを知る必要がある場合は、db._state == 'connected'またはdb.serverConfig.isConnected()をチェックできます。

実際に接続されている既知のオブジェクトをmvcに渡して、アプリケーションを起動する前にデータベースが開かれていることを確認する方がよいでしょう。

+0

パーフェクト、ありがとう!また、 'db.open()'と 'db.close()'をコールしてもいいですか?これは単独で起こるでしょうか? apiは 'db.open()'を呼び出さなくてもまだ動作しているようです。 – cnotethegr8

1

推論はあるが、一部の機能が相互作用するとき、私は、データベースが「開かれた」複数回するカントエラーが発生します。

dbオブジェクトを複数回開くのではなく、再利用する必要があります。コレクションオブジェクトの作成にはコストがかかるため、同じようにコレクションオブジェクトを使用する必要があります。

+0

はい、これらの両方のステートメントに精通していますが、私のコードはmvcタイプの構造です。したがって、実際に関数を呼び出すコントローラでは、 'db.open()'と 'db.collection()'について何も知らないので、知っているのは 'doThis()'だけです。これが 'db.open()'が呼び出されたかどうかを知る方法を知りたいので、コントローラ関数を適切に入れ子にすることができます。 – cnotethegr8

0

私はjavascriptドライバを使用しています。dbオブジェクトから直接 'openCalled'ブール値プロパティを使用しています。それを参照するのは簡単です

if (!db.openCalled) { //open database } 
関連する問題