Ce face $size
{ produse: { $size: 0 } } găsește comenzile cu tabloul produse gol, iar { $size: 2 } pe cele cu exact două produse. Câmpurile care nu sunt tablouri nu se potrivesc.
$size acceptă doar un număr exact, nu intervale ($gt nu merge înăuntru). Pentru „cel puțin 3 elemente” verifici dacă există elementul cu indicele 2 ('produse.2': { $exists: true }) sau folosești $expr cu operatorul de agregare $size.
Parametri
| Parametru | Descriere |
|---|---|
numar |
Numărul exact de elemente. |
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.comenzi.insertMany([
{ _id: 1, client: 'Ana', oras: 'Iași', total: 120, status: 'livrata', produse: ['caiet', 'pix'] },
{ _id: 2, client: 'Dan', oras: 'Cluj', total: 85, status: 'noua', produse: ['carte'] },
{ _id: 3, client: 'Ioana', oras: 'Iași', total: 240, status: 'livrata', produse: ['rucsac', 'caiet', 'pix'] },
{ _id: 4, client: 'Mihai', oras: 'Brașov', total: 60, status: 'anulata', produse: [] }
])
Exemplul 1: Comenzi fără produse
Comanda anulată a lui Mihai are tabloul gol.
db.comenzi.find({ produse: { $size: 0 } }, { client: 1, status: 1 })
Ieșire în mongosh
[ { _id: 4, client: 'Mihai', status: 'anulata' } ]
Exemplul 2: Comenzi cu cel puțin trei produse
Dacă există elementul de pe poziția 2 (al treilea), tabloul are minim trei elemente.
db.comenzi.find({ 'produse.2': { $exists: true } }, { client: 1 })
Ieșire în mongosh
[ { _id: 3, client: 'Ioana' } ]
Greșeli frecvente
{ produse: { $size: { $gt: 1 } } }dă eroare:$sizeprimește doar un număr.$sizenu poate folosi un index. Dacă filtrezi des după lungime, salvează lungimea într-un câmp separat (de exemplunrProduse) și indexează-l.
Comenzi înrudite
$all: Operatorul $all găsește documentele în care un tablou conține toate valorile date, în orice ordine.$expr: Operatorul $expr permite expresii de agregare în find(), de exemplu compararea a două câmpuri din același document.$exists: Operatorul $exists găsește documentele care au (true) sau nu au (false) un anumit câmp, indiferent de valoarea lui.