ノードの学習を試みています。ノード/モンゴでの理解の理解
- が同期
find
または非同期である:私は2つの質問を持っている(公式MongoDBはNode.jsのドライバに基づいて)このコード// Retrieve all the documents in the collection collection.find().toArray(function(err, documents) { assert.equal(1, documents.length); assert.deepEqual([1, 2, 3], documents[0].b); db.close(); });
を検討 ?
それが非同期である場合には、
.toArray
関数呼び出しが私を混乱さ、通常、私はcollection.find(function(err, results){});
の線に沿って何かを期待するので、具体的に、私はあなたが呼び出すことができますどのようなメカニズム興味を持っています.toArray
on 非同期機能の結果?私が得る非同期関数はめったに何も返しません(私は約束を除いて考える)、むしろそれらに渡されたコールバックを呼び出します。誰かが見つけて.toArray
とこの状況を明確にすることはできますか?この質問の受け入れ答えで例えば
:How to get a callback on MongoDB collection.find()、あなたは著者は、私が想定道find
を呼び出し、コールバック関数でcursor
を受け取っ見ることができます。それは私とうまくいく、それは私がそれが働くことを期待した方法です。 非同期呼び出しfind
の結果(非同期の場合)toArray
と少し混乱します。
私の推測はfind
です。実際のデータが到着したときにのみ、toArray
と呼んだときに限り、この種のデータはDBからロードされていません。私は正しい?
この混乱はAPIの変更によるものでしょうか? v2.2の 'find'は、さまざまなメソッド(' toArray'のうちの一つ)である 'Cursor'を返します。 v1.4では、 'find'はいくつかの引数を受け取り、そのうちの1つはオプションの' callback'です(まだ 'cursor'を返しています)。 – forrert
@forrert yep、それも混乱の要因でした。したがって、2.2ではfindはカーソルオブジェクトを同期的に返しますか? –
以下の答えがきちんと指摘されているので、どちらの場合もカーソルが同期して返されます。非同期に何かを実行する関数は、何か(たとえばカーソル)を返すことができることに注意してください。また、カーソル関数は、コールバックがクエリの結果を受け取ることを期待しています。 – forrert