I MongoDB kan du bruge $exists
elementforespørgselsoperator for at matche dokumenter, der indeholder et specifikt felt.
Du kan også bruge det til at matche dokumenter, der ikke indeholder et specifikt felt.
Du kan også bruge det sammen med andre operatører såsom $nin
at matche dokumenter, hvor et givet felt findes, men det ikke indeholder en bestemt værdi.
Eksempel
Antag, at vi har en samling kaldet cats
der indeholder følgende dokumenter:
{ "_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") }
Disse dokumenter er lidt inkonsistente med hensyn til de felter, de har. Nogle har en weight
felt, andre har en height
felt, nogle har en born
felt osv.
Vi kan bruge $exists
operatør for at returnere dokumenter fra den pågældende samling, som har et specifikt felt.
Eksempel:
db.cats.find( { weight: { $exists: true } } )
Resultat:
{ "_id" : 2, "name" : "Meow", "weight" : 30 } { "_id" : 4, "name" : "Sox", "weight" : 40 } { "_id" : 5, "name" : null, "weight" : 20 }
Vi kan se, at kun de dokumenter, der indeholder en weight
felt returneres.
Felter, der indeholder null
$exists
operatoren inkluderer felter, der indeholder null
. Den skelner ikke mellem null
og ikke-null
værdier.
Eksempel:
db.cats.find( { name: { $exists: true } } )
Resultat:
{ "_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 }
Vi kan se, at dokument 5 blev returneret, selvom dets name
feltet er null
.
Eksisterer uden en specifik værdi
Du kan kombinere $exists
med andre operatører for at returnere dokumenter, der indeholder feltet, men det felt indeholder ikke en bestemt værdi.
Eksempel:
db.cats.find( { weight: { $exists: true, $nin: [20,30] } } )
Resultat:
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
Dette er et andet resultat end det, vi ville have set, hvis vi blot havde brugt $nin
uden $exists
operatør.
Sådan ville det have set ud:
db.cats.find( { weight: { $nin: [20,30] } } )
Resultat:
{ "_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") }
Dokumenter, der ikke indeholder et specifikt felt
Du kan bruge $exists: false
at returnere dokumenter, der ikke indeholde det angivne felt.
Eksempel:
db.cats.find( { name: { $exists: false } } )
Resultat:
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }
I dette tilfælde indeholder et dokument i samlingen ikke name
felt.
Se efter flere felter
Du kan kontrollere, om der findes flere felter ved at adskille dem med et komma.
Eksempel:
db.cats.find( {
name: { $exists: true },
height: { $exists: true }
} )
Resultat:
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
Dette eksempel returnerer alle dokumenter, der både indeholder et name
felt og en height
felt.