Ce face $match
$match filtrează documentele care trec mai departe în pipeline. Acceptă aceiași operatori ca find(): $gte, $in, $regex, $exists și, prin $expr, expresii de agregare.
Pune $match cât mai devreme, ideal prima etapă: așa reduce numărul de documente procesate de etapele următoare și poate folosi indexurile colecției. Optimizatorul MongoDB mută singur unele filtre mai în față, dar nu te baza pe asta.
Parametri
| Parametru | Descriere |
|---|---|
filtru |
Un filtru de interogare, ca la find(). |
Ce returnează
Documentele care se potrivesc, transmise etapei următoare.
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: Doar comenzile livrate
$project de la final păstrează doar câteva câmpuri, ca rezultatul să fie scurt.
db.comenzi.aggregate([{ $match: { status: 'livrata' } }, { $project: { client: 1, total: 1 } }])
Ieșire în mongosh
[
{ _id: 1, client: 'Ana', total: 120 },
{ _id: 3, client: 'Ioana', total: 240 }
]
Exemplul 2: Mai multe condiții și numărare
Comenzi de cel puțin 80 de lei din Iași sau Cluj.
db.comenzi.aggregate([{ $match: { total: { $gte: 80 }, oras: { $in: ['Iași', 'Cluj'] } } }, { $count: 'comenzi' }])
Ieșire în mongosh
[ { comenzi: 3 } ]
Greșeli frecvente
- Un
$matchpus după$groupnu mai poate folosi indexuri și filtrează câmpurile grupului (_id, totaluri), nu pe cele originale. - În
$matchnu poți scrie direct{ total: '$alt_camp' }ca să compari câmpuri; folosește$expr.
Comenzi înrudite
$group: Etapa $group grupează documentele după o cheie și calculează totaluri: $sum, $avg, $min, $max, $push, $addToSet.$project: Etapa $project alege, redenumește sau calculează câmpurile documentelor care merg mai departe în pipeline.$expr: Operatorul $expr permite expresii de agregare în find(), de exemplu compararea a două câmpuri din același document.$count / $sortByCount: Etapa $count numără documentele ajunse în acel punct al pipeline-ului; $sortByCount numără pe valori și ordonează descrescător.
Întrebări & Exemple de Cod:
$matchAi o nelămurire despre utilizarea comenzii
$matchsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.