Ten rozdział wprowadza koncept Pipeline Agregacji w MongoDB, który jest głównie używany do analizy statystycznej, podobnie jak polecenie group by
w SQL. W powłoce MongoDB, analiza statystyczna jest osiągana za pomocą funkcji db.collection.aggregate()
.
Koncept
Pipeline Agregacji to abstrakcyjny koncept, który traktuje dane jak wodę płynącą przez rurociąg. Możemy przetwarzać dane w wielu etapach wewnątrz pipeline'u. Po przetworzeniu danych w jednym etapie, przetworzone wyniki są przekazywane do następnego etapu w celu dalszego przetwarzania.
Przykłady zastosowania pipeline'u agregacji w analizie statystycznej:
- W pierwszym etapie, partia danych dokumentów jest pobierana z kolekcji na podstawie określonych warunków.
- W drugim etapie, pobrane dane dokumentów są grupowane i agregowane.
- W trzecim etapie, dane zagregowane z drugiego etapu są sortowane.
Cały proces przypomina operację rurociągu, gdzie dane wpływają z jednego końca pipeline'u, przechodzą przez kilka etapów przetwarzania, a następnie generują ostateczny wynik.
Obsługiwane Operatory Pipeline w MongoDB
Poniżej znajdują się wspólne operatory pipeline obsługiwane przez MongoDB:
Operator | Opis |
---|---|
$match | Etap $match służy do filtrowania danych dokumentów na podstawie warunków, podobnie jak warunek where w SQL. |
$group | Etap $group służy do grupowania i agregowania danych dokumentów, podobnie jak klauzula group by w SQL. |
$sort | Używane do sortowania danych. |
Kroki do Użycia Pipeline Agregacji
Zazwyczaj zaangażowane są trzy kroki:
- Filtrowanie docelowych danych za pomocą $match.
- Grupowanie i agregowanie danych za pomocą $group.
- Sortowanie wyników za pomocą $sort (opcjonalne).
Przykład:
db.orders.aggregate([
{ $match: { status: "A" } },
{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } }
])
Odpowiednik SQL:
select sum(amount) as total from orders
where status="A"
group by cust_id
order by total desc
Uwaga: Aby uzyskać więcej informacji na temat analizy statystycznej agregatów, prosimy o odniesienie się do kolejnych rozdziałów.