MongoDBで値が配列に含まれるかどうかを確認する方法($in演算子の使い方)
MongoDBで値が配列に含まれているかどうかを確認するには?
配列型のフィールドの中に、特定の値が存在するかどうかを調べたい場合には、$in 演算子を使用します。まずは、実際の動きを確認できるよう、サンプルとなるコレクションを作成しましょう。
ステップ1:コレクションにドキュメントを挿入する
> db.testInArray.insertOne({"ListOfNumbers":[10,56,78,90,32]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e04d42df5e889d7a519950d")
}
> db.testInArray.insertOne({"ListOfNumbers":[56,78,91,100]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e04d588f5e889d7a519950e")
}
ここでは、testInArray という名前のコレクションに2つのドキュメントを挿入しました。それぞれのドキュメントには、数値のリストを格納するための ListOfNumbers という配列フィールドが含まれています。
ステップ2:登録されたドキュメントを確認する
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.testInArray.find().pretty();
このクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e04d42df5e889d7a519950d"),
"ListOfNumbers" : [
10,
56,
78,
90,
32
]
}
{
"_id" : ObjectId("5e04d588f5e889d7a519950e"),
"ListOfNumbers" : [
56,
78,
91,
100
]
}
ステップ3:$in で値が配列内にあるかテストする
それでは本題です。ある値が配列の中に含まれているかどうかを判定するクエリは、次のように記述します。
> db.testInArray.find({ ListOfNumbers:{ "$in" : [90]} });
このクエリは、「ListOfNumbers 配列の中に 90 が含まれているドキュメント」のみを返します。実行結果は以下の通りです。
{ "_id" : ObjectId("5e04d42df5e889d7a519950d"), "ListOfNumbers" : [ 10, 56, 78, 90, 32 ] }
最初のドキュメントには 90 が含まれていたためヒットし、2つ目のドキュメント([56, 78, 91, 100])は該当しないため結果から除外されました。
$in 演算子を使うときのポイント
- 複数の候補値を指定できる: 例えば { "$in": [90, 100] } のように指定すれば、90 または 100 のどちらか一方でも配列に含まれていればマッチします。SQL の IN 句に近い感覚で使えます。
- OR 条件として機能する: $in は「指定したいずれかの値に一致すればよい」という意味を持つため、複数条件での絞り込み検索に便利です。
- 配列フィールドにもそのまま使える: 通常のフィールドだけでなく、配列型のフィールドに対しても同じ書式で要素の存在チェックができます。
-
【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方
MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド
-
MongoDBで配列をクエリして特定の値を取得する方法
配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ... { ... "details": [ ... { ... "