MongoDBの配列クエリで少なくとも1つの一致を取得する方法($in演算子の使い方)
MongoDBの配列クエリで少なくとも1つの一致を取得する方法
配列型のフィールドに対してクエリを実行し、指定した値のうち少なくとも1つでも一致するドキュメントを取得したい場合は、$in演算子を使用します。$in演算子は、配列内のいずれかの要素が指定したリストに含まれているかどうかを判定し、条件に合うドキュメントをすべて返してくれます。
まずは、サンプルデータを格納するコレクションを作成しましょう。
> db.atleastOneMatchDemo.insertOne({"StudentFavouriteSubject":["MySQL","MongoDB"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2db5db64f4b851c3a13ce")
}
> db.atleastOneMatchDemo.insertOne({"StudentFavouriteSubject":["Java","C","MongoDB"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2db71b64f4b851c3a13cf")
}
> db.atleastOneMatchDemo.insertOne({"StudentFavouriteSubject":["Python","C++","SQL Server"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2db87b64f4b851c3a13d0")
}
>db.atleastOneMatchDemo.insertOne({"StudentFavouriteSubject":["Ruby","Javascript","C#","MySQL"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2dba9b64f4b851c3a13d1")
}コレクション内の全ドキュメントを確認する
以下は、find()メソッドを使用して、コレクション内のすべてのドキュメントを表示するクエリです。
> db.atleastOneMatchDemo.find().pretty();
これにより、以下の出力が得られます。
{
"_id" : ObjectId("5cd2db5db64f4b851c3a13ce"),
"StudentFavouriteSubject" : [
"MySQL",
"MongoDB"
]
}
{
"_id" : ObjectId("5cd2db71b64f4b851c3a13cf"),
"StudentFavouriteSubject" : [
"Java",
"C",
"MongoDB"
]
}
{
"_id" : ObjectId("5cd2db87b64f4b851c3a13d0"),
"StudentFavouriteSubject" : [
"Python",
"C++",
"SQL Server"
]
}
{
"_id" : ObjectId("5cd2dba9b64f4b851c3a13d1"),
"StudentFavouriteSubject" : [
"Ruby",
"Javascript",
"C#",
"MySQL"
]
}$in演算子で少なくとも1つの一致を取得する
以下は、「MongoDB」または「MySQL」のいずれかが配列に含まれるドキュメントを取得するクエリです。
>db.atleastOneMatchDemo.find({"StudentFavouriteSubject":{"$in":["MongoDB","MySQL"]}}).pretty();これにより、以下の出力が得られます。
{
"_id" : ObjectId("5cd2db5db64f4b851c3a13ce"),
"StudentFavouriteSubject" : [
"MySQL",
"MongoDB"
]
}
{
"_id" : ObjectId("5cd2db71b64f4b851c3a13cf"),
"StudentFavouriteSubject" : [
"Java",
"C",
"MongoDB"
]
}
{
"_id" : ObjectId("5cd2dba9b64f4b851c3a13d1"),
"StudentFavouriteSubject" : [
"Ruby",
"Javascript",
"C#",
"MySQL"
]
}結果を確認すると、「MongoDB」または「MySQL」を少なくとも1つ含む3件のドキュメントのみが返され、「Python」「C++」「SQL Server」のみを含むドキュメントは除外されていることがわかります。このように、$in演算子を活用することで、配列フィールドに対して「指定した値のいずれか1つでも一致すればよい」という条件での検索を簡単に実現できます。
-
MongoDBの集計パイプラインで点数が最も少ない2つのドキュメントを取得する方法
点数(Marks)の昇順に並べ替えたリストを取得するには $sort を使用します。さらに $limit: 2 を組み合わせることで、点数が最も少ない2件のドキュメントだけを表示できます。ここでは、実際に動作を確認できるよう、サンプル用のコレクションを作成していきましょう。1. サンプルコレクションの作成まずは insertOne() メソッドを使って、4件のドキュメントを登録します。> db.demo709.insertOne({Name:"John","Marks":75}); { "acknowledged
-
Pythonでリスト間の一致する要素のインデックスを取得する方法
Pythonでは、2つのリストが与えられたときに、1つ目のリストの中から「2つ目のリストの要素と値が一致する要素」のインデックス(位置)を取得したいケースがあります。例えば、曜日のリストから特定の曜日が何番目に位置するかを調べるような場面です。本記事では、この処理を実現する代表的な2つの方法を、サンプルコードと実行結果とともに解説します。方法1:index()メソッドを使う最もシンプルなのが、リストのindex()メソッドを活用する方法です。2つ目のリストの各要素について、1つ目のリスト内での位置を順番に取得し、リスト内包表記でまとめます。サンプルコードlistA = [Mon,Tue, We