SQLのWHERE IN句に相当するMongoDBのクエリ:$in演算子の使い方を解説
SQLでよく使われる WHERE IN (1, 2, ...) 句に相当する機能は、MongoDBでは $in 演算子 を使って実現できます。$in演算子を使用すると、指定した複数の値のいずれかに一致するドキュメントを効率的に検索することが可能です。
$in演算子の基本構文
基本的な構文は以下の通りです。
db.yourCollectionName.find({yourFieldName:{$in:[yourValue1,yourValue2,....N]}}).pretty();サンプルコレクションの作成
まず、動作を確認するためにドキュメントを含むコレクションを作成しましょう。ここでは学生の名前と数学の点数を格納する「whereInDemo」コレクションを使用します。
> db.whereInDemo.insertOne({"StudentName":"John","StudentMathScore":57});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca281ec6304881c5ce84ba5")
}
> db.whereInDemo.insertOne({"StudentName":"Larry","StudentMathScore":89});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca281f56304881c5ce84ba6")
}
> db.whereInDemo.insertOne({"StudentName":"Chris","StudentMathScore":98});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca281fd6304881c5ce84ba7")
}
> db.whereInDemo.insertOne({"StudentName":"Robert","StudentMathScore":99});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca2820a6304881c5ce84ba8")
}
> db.whereInDemo.insertOne({"StudentName":"Bob","StudentMathScore":97});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca282206304881c5ce84ba9")
}登録済みドキュメントの全件表示
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.whereInDemo.find().pretty();
上記のクエリを実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5ca281ec6304881c5ce84ba5"),
"StudentName" : "John",
"StudentMathScore" : 57
}
{
"_id" : ObjectId("5ca281f56304881c5ce84ba6"),
"StudentName" : "Larry",
"StudentMathScore" : 89
}
{
"_id" : ObjectId("5ca281fd6304881c5ce84ba7"),
"StudentName" : "Chris",
"StudentMathScore" : 98
}
{
"_id" : ObjectId("5ca2820a6304881c5ce84ba8"),
"StudentName" : "Robert",
"StudentMathScore" : 99
}
{
"_id" : ObjectId("5ca282206304881c5ce84ba9"),
"StudentName" : "Bob",
"StudentMathScore" : 97
}$in演算子を使った条件検索
それでは、SQLのWHERE IN句と同等の検索を$in演算子で実行してみましょう。以下の例では、「StudentMathScore」フィールドの値が97、98、99のいずれかに一致するドキュメントのみを抽出しています。
> db.whereInDemo.find({StudentMathScore:{$in:[97,98,99]}}).pretty();このクエリを実行すると、条件に一致したドキュメントだけが出力されます。
{
"_id" : ObjectId("5ca281fd6304881c5ce84ba7"),
"StudentName" : "Chris",
"StudentMathScore" : 98
}
{
"_id" : ObjectId("5ca2820a6304881c5ce84ba8"),
"StudentName" : "Robert",
"StudentMathScore" : 99
}
{
"_id" : ObjectId("5ca282206304881c5ce84ba9"),
"StudentName" : "Bob",
"StudentMathScore" : 97
}まとめ
MongoDBの$in演算子は、SQLのWHERE IN句と同様に、複数の候補値の中から一致するデータを取得したい場合に非常に便利です。数値だけでなく文字列や日付など、さまざまな型の値に対しても使用できるため、実務での柔軟なデータ検索に役立ちます。また、$nin演算子を使えば、逆に指定した値のいずれにも一致しないドキュメントを抽出することも可能です。
-
MongoDBで配列内に特定の属性を持つドキュメントを取得する方法
MongoDBで、配列フィールド内に特定の属性(値)を持つドキュメントを取得したい場合は、$and演算子とドット(.)表記を組み合わせて使用します。この記事では、実際のコード例を通じて具体的な手順をわかりやすく解説します。 1. サンプルコレクションの作成 まずは、ドキュメントを含むコレクションを作成しましょう。以下の例では、学生情報を配列として持つドキュメントをdemo2コレクションに挿入しています。 > db.demo2.insertOne({StudentInformation:[{StudentName:John,StudentAge:21},{StudentName:Mike,
-
MongoDBで配列のすべての要素が特定の値を持つドキュメントを検索する方法
MongoDBで配列内の要素を条件にドキュメントを照合するには、$elemMatch 演算子を使用します。本記事では、配列のすべての要素が特定の値(この例では86)と一致するドキュメントを抽出する方法を、実際のコード例とともに解説します。 1. サンプルコレクションの作成 まず、テスト用のコレクションを作成し、ドキュメントを挿入します。insertOne() メソッドを使って、Details フィールドに Score を持つオブジェクトの配列を格納した3件のドキュメントを登録します。 > db.demo15.insertOne({Details:[{Score:56},{Score:7