$nin (配列内のいずれでもない)
最終更新:2026-10-09
$nin (配列内のいずれでもない)
$nin は、フィールドの値が指定した配列内のどの値とも等しくないドキュメントを選択します。$in の否定です。`{ age: { $nin: [18, 21] } }` は 18 でも 21 でもない年齢のユーザーに一致します。$ne と同様、フィールドが存在しないドキュメントには一致しません。配列フィールドに対しては、いずれかの要素が配列内にない場合に一致します。
| カテゴリ | 比較 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ <field>: { $nin: [ <value1>, <value2>, ... ] } }
⚙️ パラメータ
| フィールド | マッチ対象のドキュメントフィールド。 |
|---|---|
| 値の配列 | 除外する値のリスト。フィールドはいずれとも等しくない必要があります。 |
戻り値:一致するドキュメントのカーソル
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $nin: 18 歳と 21 歳のユーザーを除外
db.users.find({ age: { $nin: [18, 21] } })
// フィールドが存在しないドキュメントは返されない
db.users.find({ age: { $nin: [18] } })
出力:
// age が 18 でも 21 でもないユーザーを返す。フィールドが存在しないドキュメントは除外
📌 注意事項
- フィールドが存在しないドキュメントには一致しない。$exists と組み合わせれば含められる
- 配列フィールドに対しては、いずれかの要素が配列内にない場合に一致する
- 1 つの値には $ne、リスト全体には $nin を使う
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$nin と $ne の違いは?
A$ne は 1 つの値を除外し、$nin はリストを除外します。どちらも「等しくない」を意味し、$nin は複数値の一括版です。
Q$nin はフィールドが存在しないドキュメントを返しますか?
Aいいえ。$ne と同様、$nin はフィールドが存在し、その値が配列内にないドキュメントのみに一致します。
Q$nin は配列フィールドにどう一致しますか?
A単一の要素が指定配列内にない場合に一致します。配列全体に対して一度に判定するわけではありません。