Ce face $type
$type filtrează după tipul valorii, nu după valoare. E foarte util pentru curățarea datelor: de exemplu vârste salvate din greșeală ca text ('35') în loc de număr. Tipul se scrie ca nume ('string', 'double', 'int', 'long', 'date', 'null', 'array', 'object') sau ca număr BSON.
Aliasul 'number' (din MongoDB 3.2) acoperă toate tipurile numerice: int, long, double și decimal. Poți da și o listă de tipuri, iar documentul se potrivește dacă are oricare dintre ele.
Parametri
| Parametru | Descriere |
|---|---|
'string', 'int', 'double', ... |
Numele tipului BSON. |
'number' |
Orice tip numeric. |
[ tip1, tip2 ] |
Oricare dintre tipurile date. |
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: Vârste salvate greșit ca text
Mihai are varsta: '35', un șir de caractere.
db.clienti.find({ varsta: { $type: 'string' } })
Ieșire în mongosh
[ { _id: 4, nume: 'Mihai', varsta: '35' } ]
Exemplul 2: Orice tip numeric
În mongosh, 28 se salvează ca double, dar 'number' îl găsește oricum.
db.clienti.find({ varsta: { $type: 'number' } }, { nume: 1 })
Ieșire în mongosh
[ { _id: 3, nume: 'Ioana' } ]
Exemplul 3: Doar valorile null explicite
Spre deosebire de { email: null }, aici nu apare Mihai, care nu are câmpul.
db.clienti.find({ email: { $type: 'null' } }, { nume: 1 })
Ieșire în mongosh
[ { _id: 2, nume: 'Dan' } ]
Greșeli frecvente
- În mongosh, numerele scrise simplu (
28) sunt double;{ $type: 'int' }nu le găsește. Folosește'number'sau salvează cuNumberInt(28). - Pentru câmpuri tablou,
$typeverifică și elementele tabloului;{ $type: 'array' }verifică tabloul însuși.
Comenzi înrudite
$exists: Operatorul $exists găsește documentele care au (true) sau nu au (false) un anumit câmp, indiferent de valoarea lui.db.createCollection(): Creează explicit o colecție, cu opțiuni: validare cu $jsonSchema, colecție capped, time series sau colație.$expr: Operatorul $expr permite expresii de agregare în find(), de exemplu compararea a două câmpuri din același document.