2016-12-12 13 views
0

私の質問は以下の阻止、したがって、nodejs 1がすべきMongoDBの.toArray .each対(非同期対ブロック?)

  1. db.collection("allinfo").find({somekey: "someval"}).each(function(err, item){ //we get each item.... });
  2. db.collection("allinfo").find({somekey: "someval"}).toArray(function(err, allitems){ //we get whole array.... });

には推奨されませんされていつ、そしていつですか?

答えて

0

ここでの実際の違いは疎であり、状況に非常に依存しています。

db.collection("allinfo").find({somekey: "someval"}) 

ここにメインです^。 findは、それほど重いものではないカーソルを開きます。実際にはかなり高速です - 次の部分は、toArrayまたはeachを使用してすべてのカーソルを読み取っています。

私の経験では、結果のカウントが否定的な場合はeachを使用します。私はそれを必要としません。開いたカーソルの長さが問題のアルゴリズムにとって重大である場合、または個々のアイテムを処理する関数の代わりに配列を処理する別の関数に渡した場合、toArrayを使用します。

これらの項目のいずれもブロックされていないため、mongoはnodejsを使用して非同期イベントループでネイティブに実行されます。手動でカーソルを動作させるように強制する必要がありますが、これはお勧めできません。

関連する問題