Skip to main content

MongoDB Aggregation Pipeline Builder

Project description

mongoagg

A fluent builder for constructing MongoDB aggregation pipelines in Python.

Features

  • Fluent interface for building complex MongoDB aggregation pipelines
  • Type-safe stage construction
  • Comprehensive validation of pipeline stages
  • Support for all major MongoDB aggregation stages:
    • $match and $expr
    • $project and field selection
    • $sort and ordering
    • $limit and $skip
    • $unwind
    • $group
    • $lookup (with support for both simple and pipeline-based joins)
    • $facet
    • $addFields
    • $replaceRoot
    • $redact
    • $comment

Installation

pip install mongoagg

Quick Start

from mongoagg import AggBuilder, Expr

# Create a simple pipeline
pipeline = (
    AggBuilder()
    .match({"status": "active"})
    .project({"name": 1, "age": 1, "_id": 0})
    .sort({"age": 1})
    .limit(10)
    .build()
)

# Use with PyMongo
result = collection.aggregate(pipeline)

Examples

Basic Querying

from mongoagg import AggBuilder, Expr

# Find active users and project specific fields
pipeline = (
    AggBuilder()
    .match({"status": "active"})
    .project({"name": 1, "email": 1, "_id": 0})
    .build()
)

Joining Collections

from mongoagg import AggBuilder, Expr

# Join with another collection using $lookup
pipeline = (
    AggBuilder()
    .match({"status": "active"})
    .lookup(
        from_="orders",
        local_field="userId",
        foreign_field="userId",
        as_="orders"
    )
    .build()
)

Complex Pipeline with Multiple Stages

from mongoagg import AggBuilder, Expr

# Complex pipeline with grouping and sorting
pipeline = (
    AggBuilder()
    .match({"status": "active"})
    .group(
        id_field="$department",
        total_salary=Expr.sum("$salary"),
        avg_salary=Expr.avg("$salary"),
        count=Expr.sum(1)
    )
    .sort({"total_salary": -1})
    .limit(5)
    .build()
)

Using Expressions

from mongoagg import AggBuilder, Expr

# Using $expr for complex conditions
pipeline = (
    AggBuilder()
    .expr(Expr.gt("$price", "$budget"))
    .project({"name": 1, "price": 1, "budget": 1})
    .build()
)

# Using conditional expressions
pipeline = (
    AggBuilder()
    .add_fields({
        "status": Expr.when(Expr.gt("$price", 100))
                     .then("expensive")
                     .otherwise("affordable")
    })
    .build()
)

# Using arithmetic expressions
pipeline = (
    AggBuilder()
    .add_fields({
        "total": Expr.add("$price", Expr.multiply("$tax", "$price")),
        "discounted_price": Expr.subtract("$price", Expr.multiply("$price", 0.1))
    })
    .build()
)

API Reference

Core Methods

  • match(query): Add a $match stage
  • project(fields): Add a $project stage
  • sort(fields): Add a $sort stage
  • limit(n): Add a $limit stage
  • skip(n): Add a $skip stage
  • unwind(path): Add a $unwind stage
  • group(id_field, **accumulators): Add a $group stage
  • lookup(from_, as_, local_field, foreign_field): Add a $lookup stage
  • facet(**pipelines): Add a $facet stage
  • add_fields(fields): Add an $addFields stage
  • replace_root(new_root): Add a $replaceRoot stage
  • redact(condition): Add a $redact stage
  • comment(text): Add a $comment stage

Expression Methods (Expr class)

The Expr class provides static methods for building MongoDB expressions:

  • Comparison: eq, ne, gt, gte, lt, lte, in_, nin
  • Logical: and_, or_, not_
  • Conditional: cond, if_null, coalesce
  • Arithmetic: add, subtract, multiply, divide, mod, pow
  • Aggregation: sum, avg, min, max, push, add_to_set
  • Array: array_elem_at, concat, filter, map, reduce
  • String: concat, substr, to_lower, to_upper, strcasecmp
  • Date: date_from_string, date_to_string, year, month, day_of_month
  • Type Conversion: to_decimal, to_double, to_int, to_long, to_string
  • Math: abs, ceil, floor, round, exp, ln, log10, sqrt

Utility Methods

  • build(): Returns the final pipeline
  • to_json(): Serializes the pipeline to JSON
  • print_pretty(): Prints the pipeline in a formatted way

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mongoagg-0.1.4.tar.gz (11.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mongoagg-0.1.4-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file mongoagg-0.1.4.tar.gz.

File metadata

  • Download URL: mongoagg-0.1.4.tar.gz
  • Upload date:
  • Size: 11.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.11.12 Linux/6.11.0-1013-azure

File hashes

Hashes for mongoagg-0.1.4.tar.gz
Algorithm Hash digest
SHA256 718cc79e52af7020d7082e64f3969083e32672b091c34f9102bc9fbeafa3c60d
MD5 51239a03b7fcbff5d97d9cee0c37b266
BLAKE2b-256 4094170d7ef5a43fa8a2855dfeedb62ee91e0df777786685d31c71e60fe71578

See more details on using hashes here.

File details

Details for the file mongoagg-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: mongoagg-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.11.12 Linux/6.11.0-1013-azure

File hashes

Hashes for mongoagg-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 2776f91f112542342a4508d3e745684f2aa6fc212594e478400804d75b78f518
MD5 16d1cdd6559a747baec7017c6e2b17d6
BLAKE2b-256 e8c483df18baaf7cf5e1b1c1c1eab7e66394956f2e9f969d9811a1ee47f0b3aa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page