$in
$in
$in
演算子は、フィールドの値が指定された配列内の任意の値と等しいドキュメントを選択します。
互換性
次の環境でホストされる配置には $in
を使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
$in
式を指定するには、次のプロトタイプを使用します。
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
異なる BSON 型値の比較については、BSON 比較順序の指定を参照してください。
field
が配列を保持している場合、 $in
演算子は、指定された配列内の値と一致する要素が少なくとも 1 つ含まれる配列をfield
が保持しているドキュメントを選択します(例: <value1>
、 <value2>
、など)。
$in
演算子は各パラメータをコレクション内の各ドキュメントと比較するため、パフォーマンスの問題が発生する可能性があります。パフォーマンスを向上させるには:
- お勧めするのは、
$in
演算子に渡すパラメーターの数を数十の値に制限することです。数百個以上のパラメーターを使用すると、クエリのパフォーマンスに悪影響を与える可能性があります。
クエリを実行したい
field
にインデックスを作成します。
Atlas Search を使用した Atlas 上のデータのクエリ
MongoDB Atlas に保存されているデータには、$search
クエリを実行中に Atlas Search の in 演算子を使用できます。$search
の後に $in
を実行するのは、$search
を in 演算子とともに実行する場合よりパフォーマンスが低くなります。
この演算子の Atlas Search バージョンの詳細については、Atlas ドキュメントの in 演算子を参照してください。
例
inventory
コレクションを次のように作成します。
db.inventory.insertMany( [ { "item": "Pens", "quantity": 350, "tags": [ "school", "office" ] }, { "item": "Erasers", "quantity": 15, "tags": [ "school", "home" ] }, { "item": "Maps", "tags": [ "office", "storage" ] }, { "item": "Books", "quantity": 5, "tags": [ "school", "storage", "home" ] } ] )
演算子を使った値の一致<a class=\" \" href=\" \" title=\" \"><svg xmlns=\" \" width=\" \" height=\" \" fill=\" \" viewbox=\" \" class=\" \" role=\" \" aria-label=\" \"><path fill=\" \" d=\" \"> <path fill=\" \" d=\" \">$in
次の例で考えてみます。
db.inventory.find( { quantity: { $in: [ 5, 15 ] } }, { _id: 0 } )
このクエリは、 quantity
フィールドの値が 5 または 15 である inventory
コレクション内のすべてのドキュメントを選択します。
{ item: 'Erasers', quantity: 15, tags: [ 'school', 'home' ] }, { item: 'Books', quantity: 5, tags: [ 'school', 'storage', 'home' ] }
このクエリは $or
演算子を使用して書けますが、同じフィールドで等価性チェックを実行する場合は、$or
演算子ではなく、$in
演算子を使用します。
$in
演算子を使った配列内の値の一致
次の updateMany()
操作は、 tags
配列に "home"
または "school"
のいずれかに一致する要素が 1 つ以上ある場合に、exclude
フィールドを false
に設定します。
db.inventory.updateMany( { tags: { $in: [ "home", "school" ] } }, { $set: { exclude: false } } )
出力例:
{ item: 'Pens', quantity: 350, tags: [ 'school', 'office' ], exclude: false }, { item: 'Erasers', quantity: 15, tags: [ 'school', 'home' ], exclude: false }, { item: 'Books', quantity: 5, tags: [ 'school', 'storage', 'home' ], exclude: false }
配列のクエリに関するその他の例えは、以下を参照してください。
クエリに関するその他の例えについては、「ドキュメントのクエリ 」を参照してください。
演算子を正規表現で使用<a class=\" \" href=\" \" title=\" \"><svg xmlns=\" \" width=\" \" height=\" \" fill=\" \" viewbox=\" \" class=\" \" role=\" \" aria-label=\" \"><path fill=\" \" d=\" \"> <path fill=\" \" d=\" \">$in
$in
演算子は、/pattern/
形式の正規表現を使用して、一致する値を指定できます。$regex
$in
内では演算子の式は使用できません。
次の例で考えてみます。
db.inventory.find( { tags: { $in: [ /^be/, /^st/ ] } } )
このクエリは、tags
フィールドに be
もしくは st
で始まる文字列を保持する、または be
もしくは st
で始まる要素が 1 つ以上ある配列を保持する inventory
コレクション内のすべてのドキュメントを選択します。