MongoDBクエリから特定の値のリストを返すことは可能ですか?map()メソッドの使い方
はい、可能です。map()メソッドを使用すれば、MongoDBのクエリ結果から特定のフィールドの値だけを抽出し、リスト(配列)として取得できます。
まずは、ドキュメントを含むコレクションを作成してみましょう。
> db.listOfSpecificValuesDemo.insertOne({"StudentName":"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cefcc8fef71edecf6a1f6bb")
}
> db.listOfSpecificValuesDemo.insertOne({"StudentName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cefcc94ef71edecf6a1f6bc")
}
> db.listOfSpecificValuesDemo.insertOne({"StudentName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cefcc98ef71edecf6a1f6bd")
}
> db.listOfSpecificValuesDemo.insertOne({"StudentName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cefcc9cef71edecf6a1f6be")
}
次に、find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみます。
> db.listOfSpecificValuesDemo.find();
出力
{ "_id" : ObjectId("5cefcc8fef71edecf6a1f6bb"), "StudentName" : "John" }
{ "_id" : ObjectId("5cefcc94ef71edecf6a1f6bc"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5cefcc98ef71edecf6a1f6bd"), "StudentName" : "Robert" }
{ "_id" : ObjectId("5cefcc9cef71edecf6a1f6be"), "StudentName" : "David" }
それでは本題です。クエリ結果から特定の値(ここでは StudentName フィールド)のリストを返すには、find()で取得したカーソルに対して map() を呼び出し、各ドキュメントから目的の値を返す関数を渡します。
> db.listOfSpecificValuesDemo.find().map(function(myDocument){ return myDocument.StudentName });
出力
[ "John", "Chris", "Robert", "David" ]
このように、find() の結果に対して map() を適用するだけで、4件のドキュメントから「John」「Chris」「Robert」「David」という学生名だけを簡単に配列として取り出せます。
なお、同様の処理は forEach() を使って手動で配列に値を追加する方法や、集計フレームワーク(Aggregation Pipeline)の $group 演算子を利用する方法でも実現可能です。用途に応じて最適な手法を選択するとよいでしょう。
-
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: [