MongoDBのクエリ結果から特定の値のリストを取得する方法|map()の使い方を解説
MongoDBのクエリで特定の値だけをリスト形式で返したい場合には、map()メソッドを利用します。この記事では、実際にコレクションを作成し、特定のフィールドの値を配列として取得するまでの手順をサンプルコード付きで解説します。
コレクションとドキュメントの作成
まず、insertOne()メソッドを使ってサンプルのドキュメントを登録します。
> db.demo195.insertOne({"Subject":"MySQL"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3af3f203d395bdc21346d4")
}
> db.demo195.insertOne({"Subject":"MongoDB"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3af3f703d395bdc21346d5")
}
> db.demo195.insertOne({"Subject":"Java"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3af3fa03d395bdc21346d6")
}
上記の例では、「MySQL」「MongoDB」「Java」という科目名を持つ3件のドキュメントを作成しました。
登録済みドキュメントの確認
続いて、find()メソッドを使ってコレクション内のすべてのドキュメントを表示してみましょう。
> db.demo195.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e3af3f203d395bdc21346d4"), "Subject" : "MySQL" }
{ "_id" : ObjectId("5e3af3f703d395bdc21346d5"), "Subject" : "MongoDB" }
{ "_id" : ObjectId("5e3af3fa03d395bdc21346d6"), "Subject" : "Java" }
map()で特定の値のリストを返すクエリ
それでは本題です。以下のようにfind()の結果に対してmap()を実行すると、各ドキュメントから「Subject」フィールドの値だけを抽出し、配列として受け取ることができます。
> db.demo195.find().map(function(doc){ return doc.Subject });
実行結果は以下の通りです。
[ "MySQL", "MongoDB", "Java" ]
まとめと補足
mongoシェルでは、カーソルに対してmap()を呼び出すだけで、ドキュメント内の任意のフィールド値を簡単にリスト化できます。なお、Node.jsなどのアプリケーション側から同様の処理を行う場合は、toArray()で一度配列に変換してからArray.prototype.map()を使うのが一般的です。さらに、大規模データを扱うケースでは、アグリゲーションパイプラインの$push演算子を利用してサーバー側で値の配列を構築する方法も有効なので、用途に応じて使い分けるとよいでしょう。
-
MongoDBで特定フィールドの値を合計するクエリの書き方(aggregate + $sum)
MongoDBでは、aggregate()メソッドと$group・$sum演算子を組み合わせることで、コレクション内のドキュメントに含まれる特定フィールドの値を簡単に合計できます。この記事では、実際のコマンド例を使いながら手順をわかりやすく解説します。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成します。ここではdemo677というコレクションに、Valueフィールドを持つ4件のドキュメントを挿入します。> db.demo677.insertOne({Value:10}); { acknowledged : true, insertedId :
-
MongoDBドキュメントから特定の値をフィルタリングする方法
MongoDBドキュメントから特定の値をフィルタリングする方法MongoDBでドキュメント内の配列から特定の値を抽出したい場合は、集計パイプラインで $filter を使用します。この記事では、実際にコレクションを作成し、特定の条件に一致する要素だけをフィルタリングする手順を、サンプルコードとともに解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、配列フィールドを含むドキュメントを持つコレクションを作成します。 db.demo751.insertOne( ... { ... _id: 101, ... details: [