In MongoDB, puoi usare $exists
operatore di query dell'elemento per abbinare i documenti che contengono un campo specifico.
Puoi anche usarlo per abbinare documenti che non contengono un campo specifico.
Puoi anche usarlo insieme ad altri operatori come $nin
per abbinare i documenti in cui esiste un determinato campo, ma non contiene un valore specifico.
Esempio
Supponiamo di avere una collezione chiamata cats
che contiene i seguenti documenti:
{ "_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") }
Questi documenti sono leggermente incoerenti per quanto riguarda i campi che hanno. Alcuni hanno un weight
campo, altri hanno un height
campo, alcuni hanno un born
campo, ecc
Possiamo usare $exists
operatore per restituire i documenti di quella raccolta che hanno un campo specifico.
Esempio:
db.cats.find( { weight: { $exists: true } } )
Risultato:
{ "_id" : 2, "name" : "Meow", "weight" : 30 } { "_id" : 4, "name" : "Sox", "weight" : 40 } { "_id" : 5, "name" : null, "weight" : 20 }
Possiamo vedere che solo quei documenti che contengono un weight
campo vengono restituiti.
Campi che contengono null
Il $exists
operatore include campi che contengono null
. Non discrimina tra null
e non null
valori.
Esempio:
db.cats.find( { name: { $exists: true } } )
Risultato:
{ "_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 }
Possiamo vedere che il documento 5 è stato restituito, anche se il suo name
il campo è null
.
Esiste senza un valore specifico
Puoi combinare $exists
con altri operatori per restituire documenti che contengono il campo, ma quel campo non contiene un valore specifico.
Esempio:
db.cats.find( { weight: { $exists: true, $nin: [20,30] } } )
Risultato:
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
Questo è un risultato diverso da quello che avremmo visto se avessimo semplicemente usato $nin
senza $exists
operatore.
Ecco come sarebbe stato:
db.cats.find( { weight: { $nin: [20,30] } } )
Risultato:
{ "_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") }
Documenti che non contengono un campo specifico
Puoi usare $exists: false
restituire documenti che non contengono il campo specificato.
Esempio:
db.cats.find( { name: { $exists: false } } )
Risultato:
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }
In questo caso, un documento della raccolta non contiene il name
campo.
Controlla più campi
Puoi verificare l'esistenza di più campi separandoli con una virgola.
Esempio:
db.cats.find( {
name: { $exists: true },
height: { $exists: true }
} )
Risultato:
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
Questo esempio restituisce tutti i documenti che contengono sia un name
campo e un height
campo.