MongoDBで複数の配列要素を条件にドキュメントを検索する方法|$all演算子の使い方
MongoDBで複数の配列要素を条件に検索するには?
MongoDBでは、$all演算子を使用することで、配列フィールドに複数の指定した要素がすべて含まれているドキュメントを検索できます。この記事では、サンプルコレクションの作成から実際の検索クエリの実行、その結果確認までを、具体例とともにわかりやすく解説します。
1. サンプルコレクションとドキュメントの作成
まず、insertOne()メソッドを使って「findByMultipleArrayDemo」コレクションに学生情報のドキュメントを4件挿入します。各ドキュメントは、名前(StudentFirstName/StudentLastName)と専攻科目の配列(StudentCoreSubject)で構成されています。
> db.findByMultipleArrayDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Smith",
"StudentCoreSubject":["Compiler","Operating System","Computer Networks"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c7ef07b559dd2396bcfbfc4")
}
> db.findByMultipleArrayDemo.insertOne({"StudentFirstName":"Carol","StudentLastName":"Taylor",
"StudentCoreSubject":["MongoDB","MySQL","SQL Server"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c7ef09d559dd2396bcfbfc5")
}
> db.findByMultipleArrayDemo.insertOne({"StudentFirstName":"Bob","StudentLastName":"Taylor",
"StudentCoreSubject":["MongoDB","MySQL","SQL Server"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c7ef0c7559dd2396bcfbfc6")
}
> db.findByMultipleArrayDemo.insertOne({"StudentFirstName":"David","StudentLastName":"Johnson",
"StudentCoreSubject":["Compiler","Operating System","Computer Networks"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c7ef0f2559dd2396bcfbfc7")
}
2. 登録されたドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。ここでは見やすさのためpretty()も併用しています。
> db.findByMultipleArrayDemo.find().pretty();
実行結果は次の通りです。
{
"_id" : ObjectId("5c7ef07b559dd2396bcfbfc4"),
"StudentFirstName" : "John",
"StudentLastName" : "Smith",
"StudentCoreSubject" : [
"Compiler",
"Operating System",
"Computer Networks"
]
}
{
"_id" : ObjectId("5c7ef09d559dd2396bcfbfc5"),
"StudentFirstName" : "Carol",
"StudentLastName" : "Taylor",
"StudentCoreSubject" : [
"MongoDB",
"MySQL",
"SQL Server"
]
}
{
"_id" : ObjectId("5c7ef0c7559dd2396bcfbfc6"),
"StudentFirstName" : "Bob",
"StudentLastName" : "Taylor",
"StudentCoreSubject" : [
"MongoDB",
"MySQL",
"SQL Server"
]
}
{
"_id" : ObjectId("5c7ef0f2559dd2396bcfbfc7"),
"StudentFirstName" : "David",
"StudentLastName" : "Johnson",
"StudentCoreSubject" : [
"Compiler",
"Operating System",
"Computer Networks"
]
}
3. $all演算子で複数の配列要素を検索する
複数の配列要素を条件に検索するには、次のように$all演算子に要素の配列を指定します。以下の例では、「Compiler」と「Computer Networks」の両方を含むドキュメントのみを取得しています。
> db.findByMultipleArrayDemo.find({ StudentCoreSubject: { $all: ["Compiler", "Computer Networks"] }}).pretty();
実行すると、両方の要素を含むドキュメントだけが返されます。結果は次の通りです。
{
"_id" : ObjectId("5c7ef07b559dd2396bcfbfc4"),
"StudentFirstName" : "John",
"StudentLastName" : "Smith",
"StudentCoreSubject" : [
"Compiler",
"Operating System",
"Computer Networks"
]
}
{
"_id" : ObjectId("5c7ef0f2559dd2396bcfbfc7"),
"StudentFirstName" : "David",
"StudentLastName" : "Johnson",
"StudentCoreSubject" : [
"Compiler",
"Operating System",
"Computer Networks"
]
}
$all演算子を使う際のポイント
- 指定したすべての要素が配列に含まれているドキュメントのみ一致します。1つでも欠けている場合は除外されます。
- 配列内での要素の順序は問われません。「Compiler」が先頭になくても一致します。
- 逆に、指定したいずれか1つでも含まれていればよい場合は、$allではなく$in演算子を使用します。
このように、$all演算子を使えば配列フィールドに対してAND条件のような絞り込みが簡単に行えます。タグやカテゴリ、履修科目など、複数の属性を持つデータの検索にぜひ活用してください。
-
MongoDBで配列内の要素数をカウントする方法
MongoDBで配列内の要素数をカウントする基本MongoDBで配列(Array)内のアイテム数をカウントするには、lengthプロパティを使用します。この記事では、実際にコレクションを作成し、配列の要素数を取得するまでの手順を実行例付きで解説します。1. コレクションにドキュメントを挿入するまず、insertOne()メソッドを使って、配列フィールドを持つドキュメントを含むコレクションを作成しましょう。> db.demo440.insertOne( ... { ... "Name":"Ch
-
MongoDBでオブジェクトの配列内の複数条件に一致するドキュメントを検索する方法($andと$regex活用)
MongoDBでオブジェクト(サブドキュメント)の配列内から、複数の条件を同時に満たすドキュメントを検索したい場合は、$and演算子と$regex演算子、さらに$elemMatchを組み合わせるのが効果的です。$andは、1つ以上の式からなる配列に対して論理AND演算を実行し、配列内のすべての条件を満たすドキュメントだけを選択します。また、$elemMatchを使うことで、配列内の同一要素が複数条件を満たすかどうかを正確に判定できます。サンプルコレクションの作成まず、検証用のコレクションを作成してドキュメントを挿入してみましょう。> db.demo525.insertOne({detai