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

MongoDBでundefinedと正確なドキュメントレコードを表示する方法

MongoDBのシェルでコレクション内のドキュメントを扱う際、forEach()メソッドを使うと、各ドキュメントに対して柔軟に処理を行えます。この記事では、forEach()のコールバック関数における引数の挙動を確認し、printjson()を使ってundefinedと実際のドキュメントレコードをそれぞれ表示する方法を解説します。

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

まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成します。

> db.demo496.insertOne({"Name":"David","CountryName":"US"});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e84b04ab0f3fa88e22790ce")
}
> db.demo496.insertOne({"Name":"John","CountryName":"AUS"});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e84b054b0f3fa88e22790cf")
}
> db.demo496.insertOne({"Name":"Robert","CountryName":"UK"});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e84b05db0f3fa88e22790d0")
}

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

find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。

> db.demo496.find();

このクエリを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e84b04ab0f3fa88e22790ce"), "Name" : "David", "CountryName" : "US" }
{ "_id" : ObjectId("5e84b054b0f3fa88e22790cf"), "Name" : "John", "CountryName" : "AUS" }
{ "_id" : ObjectId("5e84b05db0f3fa88e22790d0"), "Name" : "Robert", "CountryName" : "UK" }

forEach()でundefinedを表示する

forEach()のコールバック関数は、第1引数に現在のドキュメント、第2引数にnullを受け取ります。ここで第2引数を出力すると、undefinedが表示されます。

> db.demo496.find({}).forEach( (done, notDone) => { printjson(notDone); });

このクエリを実行すると、次のような出力が得られます。

undefined
undefined
undefined

forEach()で正確なドキュメントレコードを表示する

一方、第1引数を出力するようにすると、各ドキュメントの内容が正確に表示されます。

> db.demo496.find({}).forEach( (done, notDone) => { printjson(done); });

このクエリを実行すると、次のような出力が得られます。

{
   "_id" : ObjectId("5e84b04ab0f3fa88e22790ce"),
   "Name" : "David",
   "CountryName" : "US"
}
{
   "_id" : ObjectId("5e84b054b0f3fa88e22790cf"),
   "Name" : "John",
   "CountryName" : "AUS"
}
{
   "_id" : ObjectId("5e84b05db0f3fa88e22790d0"),
   "Name" : "Robert",
   "CountryName" : "UK"
}

まとめ

forEach()のコールバック関数では、第1引数(done)にカーソルが指す現在のドキュメントが渡され、第2引数(notDone)は使用されないためundefinedになります。ドキュメントの内容を表示したい場合は、第1引数をprintjson()に渡すことがポイントです。この挙動を理解しておくと、MongoDBシェルでのデバッグやデータ確認がスムーズになります。

  1. 【MongoDB】ネストされた(入れ子構造の)ドキュメントを更新するクエリの書き方

    MongoDBでは、入れ子(ネスト)になったサブドキュメントのフィールドを更新する際、update()メソッドとドット表記(dot notation)を組み合わせて使用します。ドット表記を使うことで、深い階層にあるフィールドを直接指定して値を変更できます。1. サンプルコレクションの作成まず、ネストされたドキュメントを含むコレクションを作成しましょう。以下のコマンドでdemo607というコレクションにドキュメントを挿入します。> db.demo607.insertOne( ... { ... id: 1, ... Info1 : { ...

  2. MySQLでORDER BY DESCを使って降順ソートし、先頭の3件のレコードを表示する方法

    データを降順(DESC)で並べ替えたうえで、先頭の数件だけを取得したいケースはよくあります。その場合は、ORDER BY ... DESCとLIMITを組み合わせることで簡単に実現できます。ここでは、具体的なサンプルを使って手順を解説します。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable ( UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserName varchar(100) ); Query OK, 0 rows affected (0.5