# Aggregation Tutorials

## Overview

Aggregation tutorials provide detailed explanations of common aggregation tasks in a step-by-step format. The tutorials are adapted from examples in the Practical MongoDB Aggregations book by Paul Done.

Each tutorial includes the following sections:

- **Introduction**, which describes the purpose and common use cases of the aggregation type. This section also describes the example and desired outcome that the tutorial demonstrates.

- **Before You Get Started**, which describes the necessary databases, collections, and sample data that you must have before building the aggregation pipeline and performing the aggregation.

- **Tutorial**, which describes how to build and run the aggregation pipeline. This section describes each stage of the completed aggregation tutorial, and then explains how to run and interpret the output of the aggregation.

At the end of each aggregation tutorial, you can find a link to a fully runnable Python code file that you can run in your environment.

## Aggregation Template App

Before you begin following an aggregation tutorial, you must set up a new Python app. You can use this app to connect to a MongoDB deployment, insert sample data into MongoDB, and run the aggregation pipeline in each tutorial.

To learn how to install the driver and connect to MongoDB, see Get Started with PyMongo

Once you install the driver, create a file called `agg_tutorial.py`. Paste the following code in this file to create an app template for the aggregation tutorials:

```python
from pymongo import MongoClient

# Replace the placeholder with your connection string.
uri = "<connection string>"
client = MongoClient(uri)

try:
    agg_db = client["agg_tutorials_db"]

    # Get a reference to relevant collections.
    # ... some_coll =
    # ... another_coll =

    # Delete any existing documents in collections.
    # ... some_coll.delete_many({})

    # Insert sample data into the collection or collections.
    # ... some_data = [...]

    # ... some_coll.insert_many(some_data)

    # Create an empty pipeline array.
    pipeline = []

    # Add code to create pipeline stages.
    # ... pipeline.append({...})

    # Run the aggregation.
    # ... aggregation_result = ...

    # Print the aggregation results.
    for document in aggregation_result:
        print(document)

finally:
    client.close()

```

In the preceding code, read the code comments to find the sections of the code that you must modify for the tutorial you are following.

If you attempt to run the code without making any changes, you will encounter a connection error.

For every tutorial, you must replace the connection string placeholder with your deployment's connection string. To learn how to locate your deployment's connection string, see Create a Connection String.

For example, if your connection string is `"mongodb+srv://mongodb-example:27017"`, your connection string assignment resembles the following:

```python
uri = "mongodb+srv://mongodb-example:27017";
```

To run the completed file after you modify the template for a tutorial, run the following command in your shell:

```bash
python3 agg_tutorial.py
```

## Available Tutorials

- Filtered Subset

- Group and Total

- Unpack Arrays and Group

- One-to-One Join

- Multi-Field Join

