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

MongoDBでカーソルを使用してコレクションをループ処理する方法

MongoDBでは、find()メソッドが返すカーソルを利用することで、コレクション内のドキュメントを1件ずつ効率的に反復処理できます。この記事では、カーソルの基本的な仕組みと、hasNext()およびnext()メソッドを使ったループ処理の具体的な手順を解説します。

カーソルでコレクションをループさせる基本構文

カーソルを使ってコレクションを反復処理する場合、基本的な構文は以下の通りです。

var anyVariableName1;
var anyVariableName2 = db.yourCollectionName.find();
while (yourVariableName2.hasNext()) {
    yourVariableName1 = yourVariableName2.next();
    printjson(yourVariableName1);
};

この構文のポイントは以下の3点です。

  • hasNext(): カーソルにまだ未読のドキュメントが残っているかどうかを判定します。
  • next(): カーソルから次のドキュメントを1件取得し、内部の位置を進めます。
  • printjson(): 取得したドキュメントを見やすいJSON形式で出力します。

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

まずは動作確認用のコレクションを作成しましょう。以下のクエリを実行して、ドキュメントを挿入します。

> db.loopThroughCollectionDemo.insertOne({"StudentName":"John","StudentAge":23});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9ca81f2d6669774125247f")
}
> db.loopThroughCollectionDemo.insertOne({"StudentName":"Larry","StudentAge":21});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9ca8272d66697741252480")
}
> db.loopThroughCollectionDemo.insertOne({"StudentName":"Chris","StudentAge":25});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9ca8462d66697741252481")
}
> db.loopThroughCollectionDemo.insertOne({"StudentName":"Robert","StudentAge":24});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9ca8632d66697741252482")
}

これで、学生名(StudentName)と年齢(StudentAge)を含む4件のドキュメントが登録されました。

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

登録したドキュメントを確認するために、find()メソッドにpretty()を組み合わせて実行します。

> db.loopThroughCollectionDemo.find().pretty();

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

{
    "_id" : ObjectId("5c9ca81f2d6669774125247f"),
    "StudentName" : "John",
    "StudentAge" : 23
}
{
    "_id" : ObjectId("5c9ca8272d66697741252480"),
    "StudentName" : "Larry",
    "StudentAge" : 21
}
{
    "_id" : ObjectId("5c9ca8462d66697741252481"),
    "StudentName" : "Chris",
    "StudentAge" : 25
}
{
    "_id" : ObjectId("5c9ca8632d66697741252482"),
    "StudentName" : "Robert",
    "StudentAge" : 24
}

カーソルを使った実際のループ処理

それでは、カーソルを使ってコレクションをループ処理してみましょう。以下のクエリを実行します。

> var allDocumentValue;
> var collectionName = db.loopThroughCollectionDemo.find();
> while (collectionName.hasNext()) {
...     allDocumentValue = collectionName.next();
...     printjson(allDocumentValue);
... }

まず変数collectionNamefind()の結果として得られるカーソルを格納し、whileループ内でhasNext()がtrueを返す限り、next()でドキュメントを取り出しては出力していきます。

実行結果は以下の通りです。

{
    "_id" : ObjectId("5c9ca81f2d6669774125247f"),
    "StudentName" : "John",
    "StudentAge" : 23
}
{
    "_id" : ObjectId("5c9ca8272d66697741252480"),
    "StudentName" : "Larry",
    "StudentAge" : 21
}
{
    "_id" : ObjectId("5c9ca8462d66697741252481"),
    "StudentName" : "Chris",
    "StudentAge" : 25
}
{
    "_id" : ObjectId("5c9ca8632d66697741252482"),
    "StudentName" : "Robert",
    "StudentAge" : 24
}

このように、カーソルを経由することでコレクション内の全ドキュメントを1件ずつ順番に処理できることが確認できました。条件に応じた個別処理や集計など、柔軟なデータ操作に活用できます。

  1. MongoDBでforループを使用して値をプッシュ(挿入)する方法

    MongoDBでforループを使用して値をプッシュ(挿入)する方法MongoDBで値を繰り返しコレクションへ挿入(プッシュ)したい場合、save()メソッドとforループを組み合わせることで簡単に実現できます。ここでは、実際のコード例を交えながら手順を解説します。1. forループでドキュメントを作成するまず、forループを使ってコレクションにドキュメントを作成します。以下の例では、ループを6回まわして同じ内容のドキュメントを保存しています。> for(var v=1; v<7; v++) {... db.demo739.save({Name:Chris,SubjectName:M

  2. C#で配列をループ処理する方法|for・foreach・whileの使い方を解説

    C#で配列の要素を順番に処理(ループ)するには、while、do...while、for、foreachといった各種ループ構文を使用できます。これらのループは開始値と終了条件を持っているため、反復処理の中で柔軟に値の設定やチェックを行うことが可能です。 配列のループに使える4つのループ構文 for文: 初期化・条件式・更新処理を1行にまとめて記述でき、インデックスを使った処理に最適です。 foreach文: 配列やコレクションの全要素を簡潔に走査できます。 while文: 条件式がtrueである限り、繰り返し処理を実行します。 do...while文: 条件判定の前に必ず1回処理を実行します