$not (論理否定)
最終更新:2026-10-09
$not (論理否定)
$not は演算子式を否定し、内側の条件を満たさないドキュメントを返します。`{ price: { $not: { $gt: 50 } } }` は最大 50 の価格の商品に一致します。$not はフィールドが存在しないドキュメントには一致せず、内側には演算子式(正規表現リテラルではなく)を置く必要があります。
| カテゴリ | 論理 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ <field>: { $not: { <operator expression> } } }
⚙️ パラメータ
| フィールド | マッチ対象のドキュメントフィールド。 |
|---|---|
| 演算子式 | 否定する演算子条件(例: { $gt: 50 })。 |
戻り値:一致するドキュメントのカーソル
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $not: price が 50 より大きくない
db.products.find({ price: { $not: { $gt: 50 } } })
// 同等: $lte のほうが直接的
db.products.find({ price: { $lte: 50 } })
出力:
// 最大 50 の商品を返す。フィールドが存在しないドキュメントは除外
📌 注意事項
- $not は存在しないフィールドには一致しない。$exists と組み合わせれば含められる
- 否定をより明確に表現できる直接演算子($lte、$ne)があればそちらを優先する
- $not は演算子式($gt、$regex など)のみ受け付ける。リテラルは不可
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$not と $ne の違いは?
A$ne は「値が等しくない」ことを意味します。$not は演算子式全体を否定します。例: { $not: { $gt: 50 } }。
Q$not はフィールドが存在しないドキュメントに一致しますか?
Aいいえ。フィールドが存在しないと内側の条件が偽になるため、否定しても一致しません。
Q$not で正規表現を否定できますか?
Aはい。{ $not: { $regex: '...' } } の形ならできます。ただし { $not: /pattern/ } のような直接指定は不可です。