定義
$ne$ne指定したフィールドの値が指定した値と等しくないドキュメントを選択します。これには、フィールドを含まないドキュメントが含まれます。異なる BSON type の値を比較するには、 が指定する BSON 比較順序 を参照してください。
互換性
次の環境でホストされる配置には $ne を使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
$ne演算子は次のような形をとります。
{ field: { $ne: value } }
注意
$ne の値が null の場合は、非等価フィルター を参照します。
例
このページの例では、付属の sample_mflixサンプルデータセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「サンプルデータセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
等しくないドキュメント フィールドのマッチング
次の例では、 runtime が 1000 分より大きく、rated が "G" と等しくない映画を返します。$ne は ratedフィールドを含まないドキュメントにも一致するため、評価データが利用できない場合でもクエリは映画を返します。
db.movies.find( { rated: { $ne: "G" }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, runtime: 1, rated: 1 } )
[ { runtime: 1256, title: 'Centennial' }, { runtime: 1140, title: 'Baseball', rated: 'TV-PG' } ]
等しくない埋め込みドキュメントフィールドに基づく更新
次の例では、埋め込みドキュメントの $ne 比較に基づいて highestRated フィールドを設定します。updateMany() 操作では、サブフィールド名が rating の埋め込みドキュメント imdb を検索します。$set を使用して、rating の値が 9.3 に等しくないか、rating サブフィールドが存在しない各ドキュメントの highestRated フィールドを false に更新します。
db.movies.updateMany( { "imdb.rating": { $ne: 9.3 } }, { $set: { "highestRated": false } } )
{ acknowledged: true, insertedId: null, matchedCount: ..., modifiedCount: ..., upsertedCount: 0 }
このクエリに相当する SQL は次のとおりです。
UPDATE movies SET highestRated = false WHERE imdb_rating != 9.3
非等価演算子$ne は、インデックスの大部分と一致することが多いため、あまり選択的ではありません。その結果、多くの場合、インデックス付きの $ne クエリのパフォーマンスは、コレクション内のすべてのドキュメントをスキャンする必要がある $ne クエリと同程度になることがあります。「 選択性のあるクエリの作成 」も参照してください。
配列
配列を比較する場合、比較値としてスカラーを渡すか配列を渡すかに応じて、$ne は異なる動作をします。
スカラー比較:
$neは、フィールドがないドキュメントを含む、スカラー値が 配列の要素として存在しないドキュメントと一致させます。正確な配列比較:
$neは、要素順序が異なる、要素数が異なる、またはフィールドが欠落しているドキュメントなど、フィールド配列が指定された配列と同一でないドキュメントを検索します。
次の例では、それぞれの動作を示すために実行時間が 1000 分を超える映画を返します。
スカラー比較の使用
次の例では、 runtime が 1000 分より大きく、"Drama" が genres 配列の要素ではない映画を返します。
db.movies.find( { genres: { $ne: "Drama" }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, genres: 1 } )
[ { genres: [ 'Documentary', 'History', 'Sport' ], title: 'Baseball' } ]
正確な配列比較の使用
次の例では、 runtime が 1000 分より大きく、genres 配列が [ "Drama" ] と完全に等しくない映画を返します。スカラー比較とは異なり、Centennial(genres: [ "Action", "Adventure", "Drama" ] と)が一致するのは、その配列が [ "Drama" ] と同一ではないためです。
db.movies.find( { genres: { $ne: [ "Drama" ] }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, genres: 1 } )
[ { genres: [ 'Action', 'Adventure', 'Drama' ], title: 'Centennial' }, { genres: [ 'Documentary', 'History', 'Sport' ], title: 'Baseball' } ]