$nor (否定論理和)
最終更新:2026-10-09
$nor (否定論理和)
$nor は複数の条件を組み合わせ、どの条件も成立しないドキュメントのみに一致します。`{ $nor: [ { price: 1.99 }, { sale: true } ] }` は 1.99 ドルでもなくセール中でもない商品に一致します。$or の逆です。注意点: フィールドが存在しないと各条件が偽になるため、$nor はフィールドが存在しないドキュメントを黙って含めてしまいます。
| カテゴリ | 論理 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $nor: [ { <condition1> }, { <condition2> }, ... ] }
⚙️ パラメータ
| 条件の配列 | クエリ述語の配列。いずれも成立してはなりません。 |
|---|
戻り値:一致するドキュメントのカーソル
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $nor: price が 1.99 でもなく、セール中でもない
db.products.find({
$nor: [
{ price: 1.99 },
{ sale: true }
]
})
出力:
// 1.99 ドルでもセール中でもない商品を返す。sale フィールドがないドキュメントも一致する点に注意
📌 注意事項
- フィールドが存在しないと各条件が偽になるため、$nor はフィールドが存在しないドキュメントを含む(古典的な落とし穴)
- 存在しないフィールドを除外するには、各条件に $exists: true を追加する
- $nor は複数の条件を否定する。$not は単一フィールドの演算子を否定する
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$nor と $not の違いは?
A$nor は複数の条件がすべて成立しないことを要求し、$not は 1 つの演算子式を否定します。
Q$nor はなぜフィールドが存在しないドキュメントを返すのですか?
A存在しないフィールドはどの条件も満たさず、$nor は「どれも成立しないこと」を要求するため、そのドキュメントが含まれてしまうのです。
Q$nor の中に $or をネストできますか?
Aはい。$nor の各要素には複雑な条件を書けます。