MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでカーソルの値を取得する方法|hasNext()とnext()の使い方を解説

MongoDBでクエリを実行すると、結果は「カーソル」と呼ばれるオブジェクトとして返されます。このカーソルからドキュメント(値)を1件ずつ取り出すには、hasNext() メソッドと next() メソッドを組み合わせて使用します。

本記事では、実際にコレクションを作成しながら、カーソルの値を取得する具体的な手順をわかりやすく解説します。

サンプルコレクションの作成

まず、ドキュメントを含むコレクションを作成します。以下では insertOne() メソッドを使って、4件の従業員データを demo191 コレクションに登録しています。

> db.demo191.insertOne({"EmployeeId":1,"EmployeeName":"Chris Brown"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ad95303d395bdc21346c5")
}
> db.demo191.insertOne({"EmployeeId":2,"EmployeeName":"David Miller"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ad95f03d395bdc21346c6")
}
> db.demo191.insertOne({"EmployeeId":1,"EmployeeName":"John Doe"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ad96803d395bdc21346c7")
}
> db.demo191.insertOne({"EmployeeId":1,"EmployeeName":"John Smith"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ad97003d395bdc21346c8")
}

find()メソッドで全ドキュメントを表示する

作成したコレクション内のすべてのドキュメントを確認するには、find() メソッドを使用します。

> db.demo191.find();

実行すると、以下のような出力が得られます。

{ "_id" : ObjectId("5e3ad95303d395bdc21346c5"), "EmployeeId" : 1, "EmployeeName" : "Chris Brown" }
{ "_id" : ObjectId("5e3ad95f03d395bdc21346c6"), "EmployeeId" : 2, "EmployeeName" : "David Miller" }
{ "_id" : ObjectId("5e3ad96803d395bdc21346c7"), "EmployeeId" : 1, "EmployeeName" : "John Doe" }
{ "_id" : ObjectId("5e3ad97003d395bdc21346c8"), "EmployeeId" : 1, "EmployeeName" : "John Smith" }

hasNext()とnext()でカーソルの値を取得する

それでは本題です。カーソルオブジェクトから値を取得するには、まず条件に合致するドキュメントを変数に格納し、その後 while ループ内で hasNext() を使って次のドキュメントが存在するかを判定します。存在する場合は next() でドキュメントを取り出し、tojson() で整形して表示します。

> var cursor = db.demo191.find( { "EmployeeId":1 } );
> while (cursor.hasNext()) {
...    print(tojson(cursor.next()));
...}

このクエリでは EmployeeId が「1」のドキュメントのみを抽出しています。実行結果は以下の通りです。

{
   "_id" : ObjectId("5e3ad95303d395bdc21346c5"),
   "EmployeeId" : 1,
   "EmployeeName" : "Chris Brown"
}
{
   "_id" : ObjectId("5e3ad96803d395bdc21346c7"),
   "EmployeeId" : 1,
   "EmployeeName" : "John Doe"
}
{
   "_id" : ObjectId("5e3ad97003d395bdc21346c8"),
   "EmployeeId" : 1,
   "EmployeeName" : "John Smith"
}

ポイントまとめ

  • hasNext():カーソルにまだ未読のドキュメントが残っているかどうかを真偽値(true/false)で返します。
  • next():カーソルが現在指している次のドキュメントを1件返します。
  • tojson():ドキュメントを見やすいJSON形式に整形して出力します。

このように、hasNext() を条件としたループ処理と next() を組み合わせることで、MongoDBのカーソルから効率的にドキュメントを1件ずつ取得できます。大量のデータを扱う場合にも、メモリを圧迫せずに逐次処理できるのがカーソル操作の大きなメリットです。

  1. MongoDBでカーソルの反復回数をカウントする方法を解説

    MongoDBでカーソルの反復をカウントするには?MongoDBにおいて、whileループとfind()メソッドが返すカーソルを組み合わせた独自のロジックを実装することで、カーソルの反復回数(特定の条件に一致するドキュメント数)をカウントできます。本記事では、実際のコード例を通じて、その具体的な手順をわかりやすく解説します。1. ドキュメントを含むコレクションを作成するまず、サンプル用のドキュメントを挿入してコレクションを作成します。> db.demo724.insertOne( ... { ... details: ... { ...

  2. MongoDBでグループごとの最大値を取得する方法($sortと$groupの活用)

    MongoDBで、重複している個別の要素(グループ)ごとに最大値を取得したい場合、aggregate()メソッドと$sort・$groupステージを組み合わせることで実現できます。この記事では、実際のコード例を通じて、その手順をわかりやすく解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成します。ここではdemo750というコレクションに、idとvalueフィールドを持つドキュメントを挿入します。> db.demo750.insertOne({id:101,value:50}); { acknowledged : true, inserted