でのカーソルの反復 mongosh
db.collection.find()
メソッドはカーソルを返します。 ドキュメントにアクセスするには、カーソルを反復する必要があります。 ただし、 mongosh
では、返されたカーソルがvar
キーワードを使用して変数に割り当てられていない場合、カーソルは自動的に最大20回まで反復されます[ 1 ]が最初の まで出力します。結果の20ドキュメント:
次の例で、カーソルを手動で反復処理してドキュメントにアクセスする方法や、イテレータ インデックスを使用する方法を説明します。
カーソルの手動反復処理
mongosh
では、 find()
メソッドから返されたカーソルを var
キーワードを使用して変数に割り当てると、カーソルは自動的に反復されません。
以下の例のように、shell で cursor 変数を呼び出して、最大 20 回繰り返し [1]、一致するドキュメントを出力できます。
var myCursor = db.users.find( { type: 2 } ); myCursor
また、次の例のように、カーソル メソッド next()
を使用してドキュメントにアクセスできます。
var myCursor = db.users.find( { type: 2 } ); while (myCursor.hasNext()) { print(tojson(myCursor.next())); }
代わりの出力操作として、printjson()
ヘルパー メソッドを使用して print(tojson())
を置き換えることを検討してください。
var myCursor = db.users.find( { type: 2 } ); while (myCursor.hasNext()) { printjson(myCursor.next()); }
次の例のように、カーソル メソッド forEach()
を使用してカーソルを反復処理し、ドキュメントにアクセスできます。
var myCursor = db.users.find( { type: 2 } ); myCursor.forEach(printjson);
カーソル メソッドの詳細については、「 JavaScript カーソル メソッド」およびドライバーのドキュメントを参照してください。
[1] | (1、2)DBQuery.shellBatchSize 属性を設定して、ドキュメント数のデフォルト値 20 を変更できます。 |
イテレータ インデックス
mongosh
では、次のように toArray()
メソッドを使用してカーソルを反復処理し、ドキュメントを配列で返すことができます。
var myCursor = db.inventory.find( { type: 2 } ); var documentArray = myCursor.toArray(); var myDocument = documentArray[3];
toArray()
メソッドは、カーソルによって返されたすべてのドキュメントを RAM にロードします。そのため、toArray()
メソッドはカーソルを使い果たします。
さらに、一部のドライバーでは、カーソルのインデックス(つまり、cursor[index]
)を使用してドキュメントにアクセスできます。これは、最初に toArray()
メソッドを呼び出し、次に結果の配列のインデックスを使用するショートカットです。
次の例で考えてみます。
var myCursor = db.users.find( { type: 2 } ); var myDocument = myCursor[1];
myCursor[1]
は次の例と同等です。
myCursor.toArray() [1];