$in (配列内のいずれか)
最終更新:2026-10-09
$in (配列内のいずれか)
$in は、フィールドの値が指定した配列内のいずれかの値と等しいドキュメントを選択します。$or の便利な省略形です。`{ age: { $in: [18, 21, 30] } }` は age が 18、21、30 のいずれかのドキュメントに一致します。複数の $eq や $or よりもインデックスに有利で、配列フィールドには特別な意味論があります。
| カテゴリ | 比較 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ <field>: { $in: [ <value1>, <value2>, ... ] } }
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $in: age が 18、21、30 のいずれかに一致
db.users.find({ age: { $in: [18, 21, 30] } })
出力:
// age がリスト内のいずれかの値であるドキュメントを返す
📌 注意事項
- 空の配列 $in: [] は何にも一致しない
- 配列フィールドに対しては、いずれかの要素が一致すればヒットする($elemMatch と同様)
- $in の中では正規表現が使える($nin では使えない)
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$in と $or ではどちらが速い?
A$in です。単一フィールドならインデックス参照が 1 回で済みますが、$or は複数のインデックス分岐をマージします。$in は正規表現にも対応しています。
Q$in は $eq を複数つなげた $or と同等ですか?
A機能的には同等ですが、$in はより簡潔で、単一のインデックス走査で高いパフォーマンスを発揮します。混在型のマッチには $type や正規表現のオペランドも受け付けます。
Q$in は配列フィールドでどう動きますか?
A配列要素のいずれかが $in リスト内のいずれかの値と等しければ一致します。$elemMatch と $in の組み合わせと同じですが、より簡潔です。