Docs Menu
Docs Home
/
MongoDBマニュアル
/ / / /

$in

項目一覧

  • 互換性
  • 構文
  • Atlas Search を使用した Atlas 上のデータのクエリ
  • $in演算子を使用した値の一致
  • $in 演算子を使った配列内の値の一致
  • 正規表現と $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 にインデックスを作成します。

注意

このドキュメントでは、$inクエリ演算子について説明します。$in集計演算子については、$in(集計)を参照してください。

MongoDB Atlas に保存されているデータには、$search クエリを実行中に Atlas Searchin 演算子を使用できます。$search の後に $in を実行するのは、$searchin 演算子とともに実行する場合よりパフォーマンスが低くなります。

この演算子の 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" ] }
] )

次の例で考えてみます。

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演算子を使用します。

次の 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
}

配列のクエリに関するその他の例えは、以下を参照してください。

クエリに関するその他の例えについては、「ドキュメントのクエリ 」を参照してください。

$in演算子は、/pattern/形式の正規表現を使用して、一致する値を指定できます。$regex$in内では演算子の式は使用できません

次の例で考えてみます。

db.inventory.find( { tags: { $in: [ /^be/, /^st/ ] } } )

このクエリは、tags フィールドに be もしくは st で始まる文字列を保持する、または be もしくは st で始まる要素が 1 つ以上ある配列を保持する inventory コレクション内のすべてのドキュメントを選択します。

Tip

以下も参照してください。

戻る

$gte