MongoDBでオブジェクト内の配列からデータを検索するクエリの書き方
MongoDBでは、ドキュメント内のオブジェクト(サブドキュメント)に格納された配列に対しても、ドット記法(dot notation)を使うことで簡単にデータを検索できます。この記事では、実際にコレクションを作成しながら、オブジェクト内の配列から特定の値を持つドキュメントを取得する方法を解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使って、オブジェクト内に配列を持つドキュメントを含むコレクションを作成します。
> db.findDataDemo.insertOne(
{
"_id": new ObjectId(),
"CustomerName": "John",
"CustomerDetails": {
"CountryName": [
"AUS"
],
"isMarried": [
false
]
}
}
);
{
"acknowledged" : true,
"insertedId" : ObjectId("5cefa5eeef71edecf6a1f6a5")
}
> db.findDataDemo.insertOne(
{
"_id": new ObjectId(),
"CustomerName": "Carol",
"CustomerDetails": {
"CountryName": [
"UK"
],
"isMarried": [
true
]
}
}
);
{
"acknowledged" : true,
"insertedId" : ObjectId("5cefa60aef71edecf6a1f6a6")
}
上記のコマンドでは、findDataDemoというコレクションに2件のドキュメントを挿入しています。各ドキュメントは、顧客名(CustomerName)と、国名や結婚状況を配列として持つCustomerDetailsオブジェクトで構成されています。
2. 登録したドキュメントの確認
find()メソッドとpretty()を組み合わせることで、コレクション内のすべてのドキュメントを見やすい形式で表示できます。
> db.findDataDemo.find().pretty();
出力結果
{
"_id" : ObjectId("5cefa5eeef71edecf6a1f6a5"),
"CustomerName" : "John",
"CustomerDetails" : {
"CountryName" : [
"AUS"
],
"isMarried" : [
false
]
}
}
{
"_id" : ObjectId("5cefa60aef71edecf6a1f6a6"),
"CustomerName" : "Carol",
"CustomerDetails" : {
"CountryName" : [
"UK"
],
"isMarried" : [
true
]
}
}
3. オブジェクト内の配列を検索するクエリ
それでは本題です。オブジェクト内の配列からデータを検索するには、「親フィールド名.配列フィールド名」という形式のドット記法を使用します。以下のクエリでは、CustomerDetails.CountryNameが"UK"であるドキュメントを検索しています。
> db.findDataDemo.find({"CustomerDetails.CountryName":"UK"});
出力結果
{ "_id" : ObjectId("5cefa60aef71edecf6a1f6a6"), "CustomerName" : "Carol", "CustomerDetails" : { "CountryName" : [ "UK" ], "isMarried" : [ true ] } }
ポイントまとめ
- ネストされたオブジェクト内の配列を検索する場合は、ドット記法(例:
"CustomerDetails.CountryName")でパスを指定する。 - 配列に対して直接値を指定すると、MongoDBが自動的に配列の要素と照合してくれる。
- 複数の条件を組み合わせたい場合は、
$elemMatch演算子を使うとより柔軟な検索が可能。
このように、MongoDBでは特別な構文を覚えなくても、ドット記法による直感的なクエリでオブジェクト内の配列データを簡単に検索できます。ぜひ実際のプロジェクトでも活用してみてください。
-
MongoDBで配列内のオブジェクトを更新する方法|update()と位置演算子($)の使い方
MongoDBで配列オブジェクトを更新するには?MongoDBでドキュメント内の配列オブジェクトを更新するには、update()メソッドを使用します。その際、ドット記法(dot notation)と位置演算子($)を組み合わせることがポイントです。位置演算子「$」は、クエリ条件に一致した配列要素を自動的に特定し、その要素だけを対象に更新処理を行ってくれます。それでは、実際にサンプルコレクションを作成しながら手順を見ていきましょう。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って、配列フィールド「details」を持つドキュメントを作成します。> d
-
MongoDBでオブジェクトの配列内の複数条件に一致するドキュメントを検索する方法($andと$regex活用)
MongoDBでオブジェクト(サブドキュメント)の配列内から、複数の条件を同時に満たすドキュメントを検索したい場合は、$and演算子と$regex演算子、さらに$elemMatchを組み合わせるのが効果的です。$andは、1つ以上の式からなる配列に対して論理AND演算を実行し、配列内のすべての条件を満たすドキュメントだけを選択します。また、$elemMatchを使うことで、配列内の同一要素が複数条件を満たすかどうかを正確に判定できます。サンプルコレクションの作成まず、検証用のコレクションを作成してドキュメントを挿入してみましょう。> db.demo525.insertOne({detai