MongoDBで配列内の特定の要素を取得する方法|forEach()による反復処理の実例
MongoDBでは、ドキュメント内の配列から特定の要素を取得したい場合、forEach()メソッドを使って反復処理を行うのが有効です。この記事では、実際のコード例を交えながら、配列の各要素へアクセスし、目的のデータを取り出す手順をわかりやすく解説します。
サンプルコレクションの作成
まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成します。ここでは「userDetails」という配列フィールドを持つドキュメントを用意しました。
> db.demo742.insertOne({ "userDetails": [ { "userName":"Robert", "CountryName":"UK" }, { "userName":"David", "CountryName":"AUS" } ]} );
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead790b57bb72a10bcf0677")
}挿入したドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo742.find().pretty();
上記のクエリを実行すると、次のような結果が出力されます。
{
"_id" : ObjectId("5ead790b57bb72a10bcf0677"),
"userDetails" : [
{
"userName" : "Robert",
"CountryName" : "UK"
},
{
"userName" : "David",
"CountryName" : "AUS"
}
]
}forEach()で配列の要素を取得するクエリ
続いて、配列から要素を取り出すクエリを見ていきましょう。以下の例では、find()で全ドキュメントを取得した後、forEach()で各ドキュメントのuserDetails配列を順に処理し、CountryNameの値を空のオブジェクトに格納しています。
> var ListOfCountryName= {};
> db.demo742.find({}).forEach(function(doc) {
... doc.userDetails.forEach(function (d){
... ListOfCountryName[d.CountryName] =d.CountryName;
... });
... }
... )
> printjson(ListOfCountryName);このクエリを実行すると、配列内の国名がキーと値として抽出され、次の出力が得られます。
{ "UK" : "UK", "AUS" : "AUS" }まとめ
このように、find()とforEach()を組み合わせることで、ネストされた配列の中身を柔軟に反復処理できます。なお、特定の条件に一致する要素だけを絞り込みたい場合は、$elemMatch演算子や、集計フレームワーク(aggregate)の$unwindステージを活用するのもおすすめです。用途に応じて最適な手法を選択しましょう。
-
MongoDBで特定フィールドの配列要素数を取得する方法($size演算子の使い方)
MongoDBでドキュメント内の特定フィールド(配列)に含まれる要素の数をカウントしたい場合は、集計パイプライン(aggregate)と$size演算子を組み合わせるのが最も簡単な方法です。この記事では、実際のコレクションを作成しながら、配列要素数を取得する具体的な手順を解説します。1. サンプルコレクションの作成まず、配列型のフィールド「Subject」を持つドキュメントを含むコレクションを作成します。> db.demo723.insertOne({Subject:[MySQL,MongoDB]}); { acknowledged : true, insertedId
-
MongoDBで特定の文字列を使ってフィールドのすべての値を一括更新する方法
MongoDBでフィールドのすべての値を一括更新する方法MongoDBのコレクション内に存在するすべてのドキュメントの特定フィールドを、同じ文字列でまとめて更新したい場合があります。そのようなときは、update()メソッドにオプション「multi: true」を指定します。この記事では、実際のコマンド例をもとに、手順をわかりやすく解説します。1. サンプルコレクションの作成まずはinsertOne()メソッドを使って、テスト用コレクション「demo720」に複数のドキュメントを挿入します。> db.demo720.insertOne({SubjectName:MySQL}); {