sql >> Database >  >> NoSQL >> MongoDB

MongoDB $bestaat

In MongoDB kunt u de $exists . gebruiken element query-operator om documenten te matchen die een specifiek veld bevatten.

Je kunt het ook gebruiken om documenten te matchen die geen specifiek veld bevatten.

Je kunt het ook gebruiken in combinatie met andere operators zoals $nin om documenten te matchen waarin een bepaald veld bestaat, maar geen specifieke waarde bevat.

Voorbeeld

Stel dat we een verzameling hebben met de naam cats die de volgende documenten bevat:

{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }

Deze documenten zijn enigszins inconsistent met betrekking tot de velden die ze hebben. Sommige hebben een weight veld, andere hebben een height veld, sommige hebben een born veld, enz

We kunnen de $exists . gebruiken operator om documenten uit die collectie terug te sturen die een specifiek veld hebben.

Voorbeeld:

db.cats.find( { weight: { $exists: true } } )

Resultaat:

{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }

We kunnen zien dat alleen die documenten die een weight . bevatten veld worden geretourneerd.

Velden die null . bevatten

De $exists operator bevat velden die null . bevatten . Het maakt geen onderscheid tussen null en niet-null waarden.

Voorbeeld:

db.cats.find( { name: { $exists: true } } )

Resultaat:

{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }

We kunnen zien dat document 5 is geretourneerd, ook al is het name veld is null .

Bestaat zonder een specifieke waarde

Je kunt $exists combine combineren met andere operators om documenten te retourneren die het veld bevatten, maar dat veld geen specifieke waarde bevat.

Voorbeeld:

db.cats.find( { weight: { $exists: true, $nin: [20,30] } } )

Resultaat:

{ "_id" : 4, "name" : "Sox", "weight" : 40 }

Dit is een ander resultaat dan het resultaat dat we zouden hebben gezien als we gewoon $nin hadden gebruikt zonder de $exists telefoniste.

Zo zou dat eruit hebben gezien:

db.cats.find( { weight: { $nin: [20,30] } } )

Resultaat:

{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }

Documenten die geen specifiek veld bevatten

U kunt $exists: false . gebruiken om documenten terug te sturen die niet het gespecificeerde veld bevatten.

Voorbeeld:

db.cats.find( { name: { $exists: false } } )

Resultaat:

{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }

In dit geval bevat één document in de collectie niet de name veld.

Controleer op meerdere velden

U kunt het bestaan ​​van meerdere velden controleren door ze te scheiden met een komma.

Voorbeeld:

db.cats.find( { 
  name: { $exists: true }, 
  height: { $exists: true } 
} )

Resultaat:

{ "_id" : 3, "name" : "Fluffy", "height" : 15 }

Dit voorbeeld retourneert alle documenten die zowel een name . bevatten veld en een height veld.


  1. $lookup meerdere niveaus zonder $unwind?

  2. Redis, verlopen sessie en reverse lookup

  3. JSON serialiseert Mongodb

  4. Een MongoDB-verzameling exporteren naar een CSV-bestand