MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB $ esiste

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.