MongoDBの配列(リスト)フィールドをクエリする方法|AND・OR条件の使い方を解説
はじめに
MongoDBでは、ドキュメント内の配列(リスト)フィールドに格納された値を、通常のフィールドと同じようにクエリできます。さらに、$andや$orなどの論理演算子を組み合わせることで、複数条件を指定した柔軟な検索も可能です。
本記事では、実際にサンプルコレクションを作成しながら、配列フィールドに対する基本検索・AND条件・OR条件のクエリ方法を順番に解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使って、学生の名前(StudentName)と点数の配列(StudentScore)を持つドキュメントを2件登録します。
> db.andOrDemo.insertOne({"StudentName":"Larry","StudentScore":[33,40,50,60,70]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9522d316f542d757e2b444")
}
> db.andOrDemo.insertOne({"StudentName":"Larry","StudentScore":[87,67,79,98,90]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c95230916f542d757e2b445")
}
2. 登録したドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.andOrDemo.find().pretty();
実行結果は以下の通りです。
{
"_id" : ObjectId("5c9522d316f542d757e2b444"),
"StudentName" : "Larry",
"StudentScore" : [
33,
40,
50,
60,
70
]
}
{
"_id" : ObjectId("5c95230916f542d757e2b445"),
"StudentName" : "Larry",
"StudentScore" : [
87,
67,
79,
98,
90
]
}
3. 配列フィールドの基本クエリ(Case 1)
配列フィールドに値を直接指定すると、「その配列内に指定した値が含まれているかどうか」でマッチングが行われます。例えば、点数70を含むドキュメントを検索するには、次のように記述します。
> db.andOrDemo.find({"StudentScore":70}).pretty();
実行結果:
{
"_id" : ObjectId("5c9522d316f542d757e2b444"),
"StudentName" : "Larry",
"StudentScore" : [
33,
40,
50,
60,
70
]
}
このように、配列内のどれか1つの要素でも指定値と一致していれば、そのドキュメントが検索結果として返されます。
4. AND条件で検索する(Case 2)
$and演算子を使うと、複数の条件をすべて満たすドキュメントのみを取得できます。例えば、「配列に60と70の両方が含まれる」ドキュメントを検索するには、次のように記述します。
> db.andOrDemo.find({"$and":[{"StudentScore":60},{"StudentScore":70}]}).pretty();
実行結果:
{
"_id" : ObjectId("5c9522d316f542d757e2b444"),
"StudentName" : "Larry",
"StudentScore" : [
33,
40,
50,
60,
70
]
}
なお、同一フィールドに対して複数の等価条件を指定する場合、JSONの仕様上キーの重複が許されないため、カンマ区切りではなく$and演算子を使用する必要がある点に注意してください。
5. OR条件で検索する(Case 3)
$or演算子を使うと、指定したいずれかの条件を満たすドキュメントを取得できます。例えば、「配列に60または90が含まれる」ドキュメントを検索するには、次のように記述します。
> db.andOrDemo.find({"$or":[{"StudentScore":60},{"StudentScore":90}]}).pretty();
実行結果:
{
"_id" : ObjectId("5c9522d316f542d757e2b444"),
"StudentName" : "Larry",
"StudentScore" : [
33,
40,
50,
60,
70
]
}
{
"_id" : ObjectId("5c95230916f542d757e2b445"),
"StudentName" : "Larry",
"StudentScore" : [
87,
67,
79,
98,
90
]
}
最初のドキュメントは60を、2つ目のドキュメントは90をそれぞれ含んでいるため、両方とも検索結果に表示されます。
まとめ
MongoDBでは、配列フィールドに対しても通常のフィールドと同様にクエリを実行でき、配列内のいずれかの要素が条件に一致するかどうかが自動的に判定されます。$andや$or演算子を組み合わせれば、より複雑な条件での検索にも柔軟に対応できます。ぜひ実際の開発でも活用してみてください。
-
MongoDBで特定のフィールド値のみを更新するクエリの書き方
MongoDBでは、update()メソッドと$set演算子を組み合わせることで、ドキュメント全体を置き換えることなく、特定のフィールドの値だけを効率的に更新できます。本記事では、実際のコード例を通じて、その具体的な手順をわかりやすく解説します。 1. コレクションとドキュメントの作成 まずは例として、insertOne()メソッドを使って「demo557」というコレクションにドキュメントを挿入します。 > db.demo557.insertOne({Name:Chris}); { acknowledged : true, insertedId : ObjectId(5e8
-
MongoDBでSQLのLIKE検索と同じことを実現する方法
MongoDBにおけるLIKE検索の基本SQLの「LIKE」句のように部分一致でデータを検索したい場合、MongoDBでは find() メソッドと正規表現(//)を組み合わせることで同様の処理を実現できます。この記事では、実際にコレクションを作成し、正規表現を使ったLIKE検索の具体的な手順を解説します。テスト用コレクションの作成まず、サンプルとなるドキュメントを含むコレクションを作成しましょう。ここでは「FirstName」というフィールドを持つドキュメントをいくつか登録します。> db.demo686.insertOne({FirstName:Robert});{ &nb