Ce face $exists
Într-o colecție MongoDB, documentele nu trebuie să aibă aceleași câmpuri. { telefon: { $exists: true } } găsește documentele care au câmpul telefon, chiar dacă valoarea lui este null. Cu false găsești documentele în care câmpul lipsește complet.
Diferența față de { email: null } este importantă: filtrul cu null găsește și documentele cu valoarea null, și pe cele fără câmp. Dacă vrei doar valorile null explicite, folosește { $type: 'null' }.
Parametri
| Parametru | Descriere |
|---|---|
true |
Câmpul există (orice valoare, inclusiv null). |
false |
Câmpul lipsește. |
Ce returnează
Un cursor cu documentele găsite.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
use magazin
db.clienti.insertMany([
{ _id: 1, nume: 'Ana', email: 'ana@exemplu.ro', telefon: '0722000111' },
{ _id: 2, nume: 'Dan', email: null },
{ _id: 3, nume: 'Ioana', email: 'ioana@exemplu.ro', varsta: 28 },
{ _id: 4, nume: 'Mihai', varsta: '35' }
])
Exemplul 1: Clienții care și-au lăsat telefonul
Doar Ana are câmpul telefon.
db.clienti.find({ telefon: { $exists: true } }, { nume: 1 })
Ieșire în mongosh
[ { _id: 1, nume: 'Ana' } ]
Exemplul 2: Clienții fără câmpul email
Dan are email: null, deci câmpul există; doar Mihai nu îl are deloc.
db.clienti.find({ email: { $exists: false } }, { nume: 1 })
Ieșire în mongosh
[ { _id: 4, nume: 'Mihai' } ]
Exemplul 3: Comparație: filtrul cu null
{ email: null } găsește ambele cazuri: valoare null și câmp lipsă.
db.clienti.find({ email: null }, { nume: 1 })
Ieșire în mongosh
[ { _id: 2, nume: 'Dan' }, { _id: 4, nume: 'Mihai' } ]
Greșeli frecvente
$exists: truenu înseamnă „are o valoare utilă”: include șinullși șirul gol. Combină cu$ne: nulldacă ai nevoie.- Un index obișnuit nu ajută mult la
$exists: false; pentru câmpuri opționale folosește un index sparse sau parțial.
Comenzi înrudite
$type: Operatorul $type găsește documentele în care un câmp are un anumit tip BSON: string, number, date, null, array etc.find() cu proiecție: Al doilea argument al lui find() alege ce câmpuri întoarce interogarea: 1 = include, 0 = exclude.$size: Operatorul $size găsește documentele în care un tablou are exact numărul dat de elemente.