$match în MongoDB & NoSQL

Etapa $match păstrează în pipeline doar documentele care se potrivesc filtrului, cu aceeași sintaxă ca find().

Sintaxă
db.colectie.aggregate([ { $match: { <filtru> } }, ... ])

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 $match pus după $group nu mai poate folosi indexuri și filtrează câmpurile grupului (_id, totaluri), nu pe cele originale.
  • În $match nu 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.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: $match

Ai o nelămurire despre utilizarea comenzii $match sau 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.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.