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.