定義
$notは、指定された
$notに対して論理NOT操作を実行し、<operator-expression><operator-expression>に一致しないドキュメントを選択します。これには、fieldを含まないドキュメントが含まれます。
互換性
次の環境でホストされる配置には $not を使用できます。
- MongoDB Atlas はクラウドでの MongoDB 配置のための完全管理サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
$not演算子の形式は次のとおりです。
{ field: { $not: { <operator-expression> } } }
次の例で考えてみます。
db.movies.find( { runtime: { $not: { $gt: 180 } } } )
この例では、次の条件を満たす movies コレクションのすべてのドキュメントを選択します。
runtimeフィールドの値が180以下であるか、またはruntimeフィールドが存在しない場合
{ $not: { $gt: 180 } } $lte 演算子とは異なります。{ $lte: 180 } は、runtimeフィールドが存在し、その値が 180 以下のドキュメントのみを返します。
$not 演算子は別の演算子式とともに使用する必要があります。たとえば、$not を使用して非等価性チェックを実行するには、次の構文を使用します。
{ runtime: { $not: { $eq: 120 } } }
上記のクエリは、次のものと同等です。
{ runtime: { $ne: 120 } }
次のクエリは演算子なしでフィールドを比較するため、無効です。
{ runtime: { $not: 120 } }
動作
配列
配列引数が渡されると、$not 演算子は予期しない結果を返す可能性があります。複数の偽条件に基づいてドキュメントを照合するには、$nor を使用します。
正規表現
このページの例では、sample_mflixサンプルデータセットのデータを使用します。このデータセットを自己管理型MongoDB配置にロードする方法の詳細については、サンプルデータセットをロードする を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
$not演算子は、以下に対して論理NOT 操作を実行できます。
正規表現オブジェクト(
/pattern/)次の例では、
runtimeが1000分より大きく、titleがTで始まっていない映画を返します。$notはtitleフィールドを含まないドキュメントにも一致するため、タイトル データが利用できない場合でもクエリは映画を返します。db.movies.find( { title: { $not: /^T/ }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, runtime: 1 } ) $regex演算子式次の 2 つのクエリでは、
runtimeが1000分より大きく、titleがTで始まっていない映画が返されます。最初のクエリは string を$regexに渡します。db.movies.find( { title: { $not: { $regex: "^T" } }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, runtime: 1 } ) 2 番目のクエリは、正規表現リテラルを
$regexに渡します。db.movies.find( { title: { $not: { $regex: /^T/ } }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, runtime: 1 } ) ドライバー言語の正規表現オブジェクト
例として、次のPyMongoクエリは Python
re.compile()の メソッドを使用して 正規式をコンパイルします。import re for noMatch in db.inventory.find( { "item": { "$not": re.compile("^p.*") } } ): print noMatch