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シェルでのデバッグやデータ確認がスムーズになります。
-
【MongoDB】ネストされた(入れ子構造の)ドキュメントを更新するクエリの書き方
MongoDBでは、入れ子(ネスト)になったサブドキュメントのフィールドを更新する際、update()メソッドとドット表記(dot notation)を組み合わせて使用します。ドット表記を使うことで、深い階層にあるフィールドを直接指定して値を変更できます。1. サンプルコレクションの作成まず、ネストされたドキュメントを含むコレクションを作成しましょう。以下のコマンドでdemo607というコレクションにドキュメントを挿入します。> db.demo607.insertOne( ... { ... id: 1, ... Info1 : { ...
-
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