1

MongoDB で次のように変数にカーソルを割り当てました。

var myCursor = db.inventory.find({},{'name':1}).sort({'name':1});

コレクションnameの属性ですinventory。私のinventoryコレクションには 4 つのドキュメントしかないことを知っておくと役立つ場合があります。

次にcursorInfo、次のコードを使用してコマンドを使用しました。

db.runCommand({cursorInfo:1});

ただし、出力を見ると、totalOpenカーソルが 0 でclientCursors_sizeあり、カーソルの数が 0 であり、カーソルの数も 0 であると主張しています。検出できないtimedOut特定の理由はありますか? (初心者の質問で申し訳ありませんが、MongoDBの学習を始めたばかりです。)cursorInfomyCursor

注: また、カーソルを完全に使用して ( を介して) myCursor、カーソル内の 1 つの項目を取得しようとしましたが (を介してmyCursor[0])、それでも同じ出力が得られました。

4

1 に答える 1

2

コレクション内のドキュメントが非常に少ない場合は、そのために batchSize() を含める必要があります: db.items.find().batchSize(2) そのため

カーソルの動作を知るには、このリンクにアクセスしてください: http://docs.mongodb.org/manual/core/read-operations/#cursor-behaviors

あなたはソートを使用しているので、「name」キーにインデックスがないか、101 個以下のドキュメント (または 1 MB のドキュメント) しかないと確信しています。一例を挙げて説明しましょう。

test:Mongo > db.runCommand({cursorInfo:1});
{ "totalOpen" : 2, "clientCursors_size" : 2, "timedOut" : 1, "ok" : 1 }
test:Mongo > var x = db.test2.find().sort({ a : -1}).batchSize(5);
test:Mongo > x.next()
test:Mongo > db.runCommand({cursorInfo:1});
{ "totalOpen" : 2, "clientCursors_size" : 2, "timedOut" : 1, "ok" : 1 }

{ a : 1 } にインデックスがないため、開いているカーソルに変更はありません (上に貼り付けたドキュメントを確認してください)。次に、インデックスを追加します。

test:Mongo > db.test2.ensureIndex({ a : -1 })
test:Mongo > var x = db.test2.find().sort({ a : -1}).batchSize(5);
test:Mongo > db.runCommand({cursorInfo:1});
{ "totalOpen" : 2, "clientCursors_size" : 2, "timedOut" : 1, "ok" : 1 }
test:Mongo > x.next()
test:Mongo > db.runCommand({cursorInfo:1});
{ "totalOpen" : 3, "clientCursors_size" : 3, "timedOut" : 1, "ok" : 1 }
于 2013-05-28T00:48:24.313 に答える