MongoDBでオブジェクトの配列内を検索し、メールアドレスフィールドと一致させる方法
MongoDBでは、ドキュメント内に埋め込みドキュメント(オブジェクト)の配列を持つデータ構造がよく使われます。この記事では、そのような配列の中から条件に一致するデータを検索し、メールアドレスフィールドと照合する方法を、具体的なサンプルコードとともに解説します。
サンプルコレクションの作成
まず、insertOne()メソッドを使用して、従業員情報(EmployeeDetails)の配列を含むドキュメントを持つコレクションを作成します。
> db.demo144.insertOne({"EmployeeDetails":[{"EmployeeName":"Chris","EmployeeEmail":"Chris12@gmail.com"},{"EmployeeName":"Bob","EmployeeEmail":"bo22@gmail.com"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e32f1d8fdf09dd6d08539b9")
}
> db.demo144.insertOne({"EmployeeDetails":[{"EmployeeName":"David","EmployeeEmail":"david@gmail.com"},{"EmployeeName":"Carol","EmployeeEmail":"Carol@gmail.com"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e32f1f5fdf09dd6d08539ba")
}登録済みドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo144.find();
上記のクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e32f1d8fdf09dd6d08539b9"), "EmployeeDetails" : [
{ "EmployeeName" : "Chris", "EmployeeEmail" : "Chris12@gmail.com" },
{ "EmployeeName" : "Bob", "EmployeeEmail" : "bo22@gmail.com" }
]
}
{
"_id" : ObjectId("5e32f1f5fdf09dd6d08539ba"), "EmployeeDetails" : [
{ "EmployeeName" : "David", "EmployeeEmail" : "david@gmail.com" },
{ "EmployeeName" : "Carol", "EmployeeEmail" : "Carol@gmail.com" }
]
}配列内を検索してメールアドレスと一致させるクエリ
以下が、ドット表記を使用してオブジェクトの配列内を検索し、従業員名とメールアドレスの両方の条件に一致するドキュメントを取得するクエリです。
> db.demo144.find({"EmployeeDetails.EmployeeName":"David","EmployeeDetails.EmployeeEmail":"david@gmail.com"},{"EmployeeDetails.EmployeeName":1});このクエリを実行すると、次の出力が得られます。
{ "_id" : ObjectId("5e32f1f5fdf09dd6d08539ba"), "EmployeeDetails" : [ { "EmployeeName" : "David" }, { "EmployeeName" : "Carol" } ] }クエリのポイント
- ドット表記:「配列フィールド名.内部フィールド名」の形式で、配列内の埋め込みドキュメントのフィールドにアクセスできます。
- プロジェクション:第2引数に「{"EmployeeDetails.EmployeeName": 1}」を指定することで、_idと従業員名のみを返すように制限しています。
- $elemMatch:名前とメールアドレスを「同じ配列要素」内で同時に一致させたい場合は、$elemMatch演算子を使用するとより厳密な検索が可能です。
-
MongoDBで配列内の一致オブジェクト数に基づいてドキュメントを検索する方法
MongoDBでは、$where演算子とJavaScript関数を組み合わせることで、配列内に存在する一致したオブジェクトの数に基づいてドキュメントを検索できます。この記事では、具体的なサンプルを通じてその方法を解説します。サンプルデータの準備まずは、ドキュメントを含むコレクションを作成しましょう。> db.demo694.insertOne( ... { ... details : ... [ ... { ... Name : Chris, ... Age:21 ...
-
$elemMatch演算子を使った配列フィールドを持つドキュメントの検索方法【MongoDB】
MongoDBで配列フィールド内の要素に基づいてドキュメントを検索したい場合、$elemMatch 演算子を使用します。$elemMatch を使うことで、配列内の同一の要素に対して複数の条件を同時に適用できるのが大きな特徴です。この記事では、実際にコレクションを作成し、配列フィールドを含むドキュメントを $elemMatch で照合する手順を解説します。1. テスト用コレクションの作成まず、配列フィールド details を持つドキュメントを挿入して、サンプルコレクションを作成しましょう。> db.demo592.insertOne( ... { ... id:1