Ce face $all
{ produse: { $all: ['caiet', 'pix'] } } găsește comenzile care au în tabloul produse și caiet, și pix. Ordinea elementelor și existența altor elemente nu contează.
Diferența față de $in: $in cere cel puțin una dintre valori (SAU), iar $all le cere pe toate (ȘI). Spre deosebire de egalitatea exactă { produse: ['caiet', 'pix'] }, $all nu cere ca tabloul să fie identic.
Parametri
| Parametru | Descriere |
|---|---|
[ valori ] |
Valorile care trebuie să apară toate în tablou. |
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 care conțin și caiet, și pix
Comanda Ioanei are și un rucsac, dar asta nu contează.
db.comenzi.find({ produse: { $all: ['caiet', 'pix'] } }, { client: 1, produse: 1 })
Ieșire în mongosh
[
{ _id: 1, client: 'Ana', produse: [ 'caiet', 'pix' ] },
{ _id: 3, client: 'Ioana', produse: [ 'rucsac', 'caiet', 'pix' ] }
]
Exemplul 2: Comparație cu egalitatea exactă
Egalitatea cu un tablou cere aceleași elemente, în aceeași ordine: doar comanda Anei se potrivește.
db.comenzi.find({ produse: ['caiet', 'pix'] }, { client: 1 })
Ieșire în mongosh
[ { _id: 1, client: 'Ana' } ]
Greșeli frecvente
- Pentru tablouri de obiecte, unde mai multe condiții trebuie să fie îndeplinite de același element, folosește
$elemMatch. { $all: [] }(tablou gol) nu găsește niciun document.
Comenzi înrudite
$size: Operatorul $size găsește documentele în care un tablou are exact numărul dat de elemente.$unwind: Etapa $unwind desface un tablou: produce câte un document pentru fiecare element, ca să-l poți grupa sau filtra.$expr: Operatorul $expr permite expresii de agregare în find(), de exemplu compararea a două câmpuri din același document.