sql >> Database >  >> NoSQL >> MongoDB

MongoDB $nin Query-operator

In MongoDB, de $nin query-operator selecteert de documenten waar de waarde van het veld niet in de opgegeven matrix staat of waar het veld niet bestaat.

Voorbeeld

Stel dat we een verzameling hebben met de naam products met de volgende documenten:

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

We kunnen de $nin . gebruiken operator om alleen die documenten te selecteren die geen specifieke _id . hebben waarden.

Voorbeeldcode:

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

Resultaat:

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

In dit geval wilden we alleen documenten die niet bevatten een _id waarde van 1 , 2 , of 3 .

Voorbeeld 2

Hier is nog een voorbeeld. Deze keer gebruiken we $nin tegen een ander veld.

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

Resultaat:

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

In dit voorbeeld hebben we $nin . toegepast naar de sizes veld.

Merk op dat document 6 is geretourneerd, ook al heeft het geen sizes veld. Dit is precies zoals verwacht - als het veld niet bestaat, is het opgenomen in de $nin resultaten.

Vergelijking van verschillende typen wordt geëvalueerd volgens de BSON-vergelijkingsvolgorde.

Aggregatievoorbeeld

We kunnen dezelfde syntaxis gebruiken bij het gebruik van de $match aggregatie pijpleiding operator.

Voorbeeldcode:

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

Resultaat:

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

En hier is het weer tijdens het opvragen van de sizes veld:

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

Resultaat:

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

Regelmatige expressies

U kunt reguliere expressies in de query gebruiken door gebruik te maken van het formulier /pattern/ .

Voorbeeld:

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

Resultaat:

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

In dit voorbeeld retourneer ik alle documenten die geen sizes . hebben veld dat begint met X .


  1. MongoDB:Hoe kom ik erachter of een arrayveld een element bevat?

  2. dial tcp [::1]:6397:connectex:Er kon geen verbinding worden gemaakt omdat de doelcomputer dit actief weigerde

  3. Query IDE voor MongoDB?

  4. Hoe MongoError op te lossen:pool vernietigd tijdens verbinding met CosmosDB