AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

でのカーソルの反復 mongosh

このチュートリアルでは、カーソル内のドキュメントにアクセスする方法を説明します。

カーソル内のドキュメントにアクセスするには、カーソルを手動で反復処理するか、toArray() メソッドを使用します。

このチュートリアルでは、次の方法について概説します。

  • let キーワードを使用してカーソルを変数として保存します。

  • カーソル内のドキュメントにアクセスするには、 next()hasNext()forEach() 、 メソッドを使用します。

  • toArray() メソッドを使用して、カーソル ドキュメントを配列として返してアクセスします。

カーソルはドキュメントをバッチで返します。デフォルトでは 、 mongosh20 はカーソルの反復ごとに のドキュメントを表示します。ニーズが多すぎるか不足している場合は、 config.set("displaceBatchSize"") を使用して変更できます。

mongoshを使用して、デフォルトの データベースを使用して新しいコレクションにドキュメントを挿入します。test

db.users.insertMany( [
{ _id: 0, type: "admin", email: "admin@example.com", name: "Admin User" },
{ _id: 1, type: "user", email: "user1@example.com", name: "Test User 1" },
{ _id: 2, type: "user", email: "user2@example.com", name: "Test User 2" }
] )

では、mongosh letキーワードを使用して変数に割り当てても、カーソルは自動的に反復されません。

let myCursor = db.users.find( { type: "user" } )

shell でカーソル変数を呼び出して、一致するドキュメントを出力できます。

myCursor
[
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
},
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}
]

返されたカーソルが let キーワードを使用して変数に割り当てられていない場合、カーソルはバッチ サイズまで自動的に繰り返し処理され、最初のバッチするの結果が出力されます。

db.users.find( { type: "user" } )
[
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
},
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}
]

カーソル メソッド next() を使用してドキュメントにアクセスすることもできます。next() は、カーソルが現在指しているドキュメントを返し、カーソルを次のドキュメントに移動します。

let myCursor = db.users.find( { type: "user" } )
myCursor.next()
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
}

カーソル メソッド hasNext()true または false を返して、カーソルから返されるドキュメントが他にもあるかどうかを示します。

let myCursor = db.users.find( { type: "user" } )
myCursor.hasNext()
true

hasNext() メソッドと next() メソッドを使用して、printjson() ヘルパーを使い、カーソルから残りのすべてのドキュメントを印刷できます。

let myCursor = db.users.find( { type: "user" } )
while ( myCursor.hasNext() ) {
printjson( myCursor.next() )
}
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
}
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}

同様に、カーソル内の各ドキュメントに対して forEach() カーソル メソッドを使用し、printjson() などのヘルパーを適用することができます。

let myCursor = db.users.find( { type: "user" } )
myCursor.forEach( myDocument => printjson(myDocument) )
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
}
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}

mongosh21..0 以降では、for-of ループを使用してカーソルを反復処理することもできます。次の例では、前の例と同じ結果が返されます。

let myCursor = db.users.find( { type: "user" } )
for ( let myDocument of myCursor ) {
printjson( myDocument )
}
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
}
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}

カーソル メソッドの詳細については、「 JavaScript カーソル メソッド」およびドライバーのドキュメントを参照してください。

mongoshでは、toArray() メソッドを使用してカーソルが反復処理され、ドキュメントが配列で返されます。

let myCursor = db.users.find( { type: "user" } )
let documentArray = myCursor.toArray()
documentArray
[
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
},
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}
]

結果のドキュメント配列には、従来の配列としてアクセスすることができます。

let myCursor = db.users.find( { type: "user" } )
let documentArray = myCursor.toArray()
documentArray[1]
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}

toArray() メソッドは、カーソルによって返されるすべてのドキュメントを RAM に読み込み、カーソルを使い切ります。

一部の ドライバー では、カーソルのインデックス(つまりcursor[index] )を使用してドキュメントにアクセスできます。これは、最初にtoArray() メソッドを呼び出し、次に結果の配列のインデックスを使用するショートカットです。

let myCursor = db.users.find( { type: "user" } )
myCursor.toArray() [1]
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}