sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $nin Query Operator

I MongoDB, $nin frågeoperatorn väljer de dokument där fältets värde inte finns i den angivna arrayen eller där fältet inte finns.

Exempel

Anta att vi har en samling som heter products med följande dokument:

{ "_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" }

Vi kan använda $nin operatör för att välja bara de dokument som inte har specifik _id värden.

Exempelkod:

db.products.find({ 
  _id: { $nin: [ 1, 2, 3 ] } 
})

Resultat:

{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

I det här fallet ville vi bara ha dokument som inte gör det innehåller ett _id värdet 1 , 2 eller 3 .

Exempel 2

Här är ett annat exempel. Den här gången använder vi $nin mot ett annat fält.

db.products.find({ 
  sizes: { $nin: [ "L" ] } 
})

Resultat:

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

I det här exemplet använde vi $nin till sizes fält.

Observera att dokument 6 returnerades, även om det inte har en sizes fält. Detta är exakt som förväntat – om fältet inte finns ingår det i $nin resultat.

Jämförelser av olika typer utvärderas enligt BSON-jämförelseordningen.

Aggregationsexempel

Vi kan använda samma syntax när vi använder $match aggregeringspipeline-operatör.

Exempelkod:

db.products.aggregate(
   [
     { $match: { _id: { $nin: [ 1, 2, 3 ] } } }
   ]
)

Resultat:

{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

Och här är den igen när du frågar efter sizes fält:

db.products.aggregate(
   [
     { $match: { sizes: { $nin: [ "L" ] } } }
   ]
)

Resultat:

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

Reguljära uttryck

Du kan använda reguljära uttryck i frågan genom att använda formen /pattern/ .

Exempel:

db.products.find({ 
  sizes: { $nin: [ /^X/ ] } 
})

Resultat:

{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 5, "prod" : "Jeans", "sizes" : null }
{ "_id" : 6, "prod" : "Shorts" }

I det här exemplet returnerar jag alla dokument som inte har en sizes fält som börjar med X .


  1. Varför returnerar Laravel Redis::scan('*') en förväntad nyckel men inte Redis::keys('*')?

  2. MongoDB vad är standardanvändaren och lösenordet?

  3. Redis Vs RabbitMQ som ett datamäklare/meddelandesystem mellan Logstash och elasticsearch

  4. MongoDB-funktioner i ClusterControl 1.4