MongoDBで配列フィールドに対して$in演算子を使ったクエリを実装する方法
MongoDBの$in演算子とは
MongoDBの$in演算子を使うと、指定した配列内のいずれかの値に一致するドキュメントを検索できます。配列型のフィールドに対して$inを使用すると、その配列の要素に指定値が1つでも含まれていれば、該当するドキュメントとして取得されます。
この記事では、実際にコレクションを作成し、配列フィールド「ListOfName」に対して$inクエリを実行する手順を解説します。
ドキュメントを含むコレクションの作成
まず、ドキュメントを挿入してコレクションを作成しましょう。以下のようにinsertOne()メソッドを使用します。
> db.demo520.insertOne({"ListOfName":["John","Bob"]});{
"acknowledged" : true,
"insertedId" : ObjectId("5e899fb4b3fbf26334ef6114")
}
> db.demo520.insertOne({"ListOfName":["Chris","David"]});{
"acknowledged" : true,
"insertedId" : ObjectId("5e899fbfb3fbf26334ef6115")
}
> db.demo520.insertOne({"ListOfName":["Mike","Bob"]});{
"acknowledged" : true,
"insertedId" : ObjectId("5e899fc7b3fbf26334ef6116")
}これで、「ListOfName」という名前の配列を持つ3つのドキュメントが登録されました。
find()メソッドですべてのドキュメントを表示する
次に、find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo520.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e899fb4b3fbf26334ef6114"), "ListOfName" : [ "John", "Bob" ] }
{ "_id" : ObjectId("5e899fbfb3fbf26334ef6115"), "ListOfName" : [ "Chris", "David" ] }
{ "_id" : ObjectId("5e899fc7b3fbf26334ef6116"), "ListOfName" : [ "Mike", "Bob" ] }$in演算子を使った配列検索の実装
それでは、本題である$in演算子を使ったクエリを見ていきましょう。以下の例では、「ListOfName」フィールドに「Bob」または「Mike」が含まれるドキュメントを検索しています。
> db.demo520.find({"ListOfName":{$in:["Bob","Mike"]}});このクエリを実行すると、次の出力が得られます。
{ "_id" : ObjectId("5e899fb4b3fbf26334ef6114"), "ListOfName" : [ "John", "Bob" ] }
{ "_id" : ObjectId("5e899fc7b3fbf26334ef6116"), "ListOfName" : [ "Mike", "Bob" ] }結果の解説
出力結果を見ると、「Bob」または「Mike」を含む2つのドキュメントのみが返されていることがわかります。「Chris」と「David」のみを含む2番目のドキュメントは、条件に一致しないため除外されました。
このように、配列フィールドに対して$inを使用することで、複数の候補値のうちどれか1つでも配列内に存在すれば、そのドキュメントを効率的に取得できます。条件値はカンマ区切りでいくつでも追加できるため、柔軟な検索が可能です。
-
MongoDBでネストされた配列をソートする方法:$unwindと$sortを活用したクエリ
MongoDBでドキュメント内に格納されたネストされた配列(サブドキュメントの配列)をソートしたい場合、集計パイプライン(aggregate)を使い、$unwindで配列を展開した後に$sortで並べ替え、最後に$groupで再構成するのが定番のアプローチです。この記事では、実際にコレクションを作成しながら、ネストされた配列をスコア順にソートする手順を解説します。1. サンプルコレクションの作成まず、ネストされた配列「details」を持つドキュメントを挿入してコレクションを作成します。> db.demo505.insertOne( ... { ... details: [ ..
-
MongoDBで配列の一致を検索するには?$all演算子の使い方を解説
MongoDBで配列フィールドに対して複数の要素がすべて含まれているかどうかを確認したい場合、$all 演算子を使用します。$all演算子は、指定したすべての要素を配列に含むドキュメントだけを選択するためのクエリ演算子です。この記事では、実際のコレクションを作成しながら、$all演算子を使った配列一致検索の手順を具体的に見ていきましょう。サンプルコレクションの作成とインデックス設定まず、ドキュメントを格納するコレクションを作成し、「ListOfSubject」フィールドにインデックスを設定します。> db.demo668.createIndex({ListOfSubject:1}); {