$nin$nin次の条件を満たすドキュメントを選択します。指定されたフィールド値が指定された配列にない、または
指定されたフィールが存在しない。
互換性
次の環境でホストされる配置には $nin を使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
$nin 演算子は次の形式をとります。
{ field: { $nin: [ <value1>, <value2> ... <valueN> ] } }
field に配列がある場合、$nin 演算子は、field に含まれている配列に、指定された配列内の値と等しい要素がないドキュメントを選択します。例: <value1>、<value2>など。
異なる BSON 型値の比較については、BSON 比較順序の指定を参照してください。
例
このページの例では、付属の sample_mflixサンプルデータセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「サンプルデータセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
不一致ドキュメントを選択
次の例では、 runtime が 1000 分より大きく、rated が [ "G", "PG" ] にない映画を返します。$nin は ratedフィールドを含まないドキュメントにも一致するため、評価データが利用できない場合でもクエリは映画を返します。
db.movies.find( { rated: { $nin: [ "G", "PG" ] }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, year: 1, rated: 1 } )
[ { title: 'Centennial', year: 1978 }, { title: 'Baseball', year: 1994, rated: 'TV-PG' } ]
配列にない要素を選択する
次の例では、genres 配列に "Drama" がない映画の excludeフィールドを true に設定します。
db.movies.updateMany( { genres: { $nin: [ "Drama" ] } }, { $set: { exclude: true } } )
{ acknowledged: true, insertedId: null, matchedCount: ..., modifiedCount: ..., upsertedCount: 0 }
updateMany() は、ドキュメントに $nin が一致するフィールドが含まれていない場合にもそのドキュメントを選択します。
非等価演算子$nin は、インデックスの大部分と一致することが多いため、あまり選択的ではありません。その結果、多くの場合、インデックス付きの クエリのパフォーマンスは、コレクション内のすべてのドキュメントをスキャンする必要がある$nin $ninクエリと同程度になることがあります。「 選択性のあるクエリの作成 」も参照してください。