2012-04-21 7 views
1

は、私が何かのような...mongoコレクションへの参照を保存できますか?ファイルの先頭に

var collection = db.mongo.collection('test', function(err, collection){return collection});

を置くことができ、その後の機能がcollection.find()など

を使用しているファイルのいずれかで、私は私の質問があると思います... collectionですコレクションの参照またはデータのコピー?

コレクションのデータが変更されても、collection変数を照会すると最新のデータになりますか?

ありがとうございます!

答えて

0

コレクションはコレクションオブジェクトの参照です。 find(またはfindOne)を発行するまで、実際のデータは手元にありません。それでも、それは、Cursorオブジェクトを返します。コレクションオブジェクトは、そのまま残しておきます。

コレクションまたはカーソルの両方を保存しても、データは保存されません。何百万というレコードを扱うことができることを忘れないでください。データそのものを扱うことは、サーバーのメモリにとって圧倒的なものになる可能性があります。代わりに、mongoはカーソルと参照を返してフィルタリングします。 PHPではiterator_to_arrayという関数があり、カーソルを渡してデータの配列に変換します。 javascriptでは、そのような関数があるかどうかわかりません。しかし、私はそれがそのような機能であることは理にかなっていないと思う。管理可能なデータサイズになるまで情報をフィルタリングしてから、カーソルを反復して処理します。もしあなたがconfig配列のようなものを持っているなら、いくつかのドキュメントの中にすべてを格納し、findOne()関数を使ってそれを取得してみてください。

しかし、最終的には、あなたのデータがフィルタリングできるかどうかというのは設計上の問題だと思います。

+0

質問は、コレクション参照を変数に格納するか、毎回そのようなパターンで開く必要があるかどうかについてです: 'db.mongo.collection( 'test'、function(err、collection) {collection.find()}); 'phpの同期I/Oで物事が同じように振る舞うかどうかわからないので、ノードの質問のほうが多いかもしれません。 – fancy

+0

ああ、わかりました。単なるポインタなので、便宜のためにvarに格納することができます。それはノードの問題だよ。アプリケーションが多くの時間を実行すると仮定します(始まりと終わりのPHPスクリプトのようなものではありません)。コレクションをたくさん使う場合は、varに保存することができます。 2つの連続したクエリを実行し、それらの間でデータを変更すると、2つの異なる結果セット(または異なる結果セットを示すカーソル)が表示されます。 –

関連する問題