MongoDBでは、$nin
クエリ演算子は、フィールドの値が指定された配列にないか、フィールドが存在しないドキュメントを選択します。
例
products
というコレクションがあるとします。 次のドキュメントを使用:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] } { "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
$nin
を使用できます 演算子を使用して、特定の_id
を持たないドキュメントのみを選択します 値。
コード例:
db.products.find({
_id: { $nin: [ 1, 2, 3 ] }
})
結果:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
この場合、しないドキュメントのみが必要でした。 _id
を含む 1
の値 、2
、または3
。
例2
別の例を示します。今回は$nin
を使用します 別のフィールドに対して。
db.products.find({
sizes: { $nin: [ "L" ] }
})
結果:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
この例では、$nin
を適用しました sizes
に 分野。
sizes
がないにもかかわらず、ドキュメント6が返されたことに注意してください。 分野。これはまったく予想どおりです。フィールドが存在しない場合は、$nin
に含まれます。 結果。
異なるタイプの比較は、BSONの比較順序に従って評価されます。
集計例
$match
を使用する場合も、同じ構文を使用できます。 集約パイプライン演算子。
コード例:
db.products.aggregate(
[
{ $match: { _id: { $nin: [ 1, 2, 3 ] } } }
]
)
結果:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
そして、ここでもsizes
をクエリしている間です フィールド:
db.products.aggregate(
[
{ $match: { sizes: { $nin: [ "L" ] } } }
]
)
結果:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
正規表現
/pattern/
の形式を使用して、クエリで正規表現を使用できます。 。
例:
db.products.find({
sizes: { $nin: [ /^X/ ] }
})
結果:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
この例では、sizes
を持たないすべてのドキュメントを返します X
で始まるフィールド 。