A fluent, type-safe query builder for MongoDB with support for aggregations and Atlas Search
Project description
MongoDB Query Builder
A fluent, type-safe query builder for MongoDB with support for complex queries, aggregation pipelines, and Atlas Search.
Features
✨ Fluent API - Chain methods for readable query construction
🔒 Type-safe - Full type hints and validation
📦 Comprehensive - Support for queries, aggregations, and Atlas Search
🎯 Intuitive - Pythonic interface for MongoDB operations
✅ Well-tested - Extensive test coverage
📚 Well-documented - Complete API documentation and examples
Installation
pip install mongodb-query-builder
Quick Start
Simple Query
from mongodb_query_builder import QueryFilter
# Build a query filter
query = QueryFilter()\
.field("age").greater_than(18)\
.field("status").equals("active")\
.build()
# Use with pymongo
collection.find(query)
Aggregation Pipeline
from mongodb_query_builder import AggregateBuilder, QueryFilter
# Build aggregation pipeline
pipeline = AggregateBuilder()\
.match(QueryFilter().field("status").equals("active"))\
.group(by="$category", count={"$sum": 1}, total={"$sum": "$amount"})\
.sort("count", ascending=False)\
.limit(10)\
.build()
# Use with pymongo
results = collection.aggregate(pipeline)
Atlas Search
from mongodb_query_builder import AtlasSearchBuilder, CompoundBuilder
# Simple text search
search = AtlasSearchBuilder()\
.text("python developer", path=["title", "description"])\
.build_stage()
# Complex compound search
compound = CompoundBuilder()
compound.must().text("python", path="skills")
compound.should().text("senior", path="level", score=2.0)
compound.filter().range("experience", gte=3)
search = AtlasSearchBuilder()\
.compound(compound)\
.facet("departments", type="string", path="department")\
.build_stage()
# Use in aggregation
pipeline = [search, {"$limit": 10}]
results = collection.aggregate(pipeline)
Core Components
QueryFilter
Build MongoDB query filters with a fluent interface:
from mongodb_query_builder import QueryFilter
# Comparison operators
q = QueryFilter().field("age").greater_than(18)
q = QueryFilter().field("price").between(10, 100)
# String operations
q = QueryFilter().field("name").starts_with("John")
q = QueryFilter().field("email").contains("@example.com")
# Array operations
q = QueryFilter().field("tags").array_contains("python")
q = QueryFilter().field("skills").array_contains_all(["python", "mongodb"])
# Logical operators
q = QueryFilter().any_of([
QueryFilter().field("role").equals("admin"),
QueryFilter().field("role").equals("moderator")
])
AggregateBuilder
Build aggregation pipelines:
from mongodb_query_builder import AggregateBuilder
pipeline = AggregateBuilder()\
.match(QueryFilter().field("status").equals("active"))\
.group(by="$category", count={"$sum": 1})\
.sort("count", ascending=False)\
.limit(10)\
.project(category="$_id", count=1, _id=0)\
.build()
AtlasSearchBuilder
Build Atlas Search queries:
from mongodb_query_builder import AtlasSearchBuilder, CompoundBuilder
# Text search with fuzzy matching
search = AtlasSearchBuilder()\
.text("search term", path="title", fuzzy={"maxEdits": 2})\
.build_stage()
# Compound search
compound = CompoundBuilder()
compound.must().text("required term", path="content")
compound.should().text("optional term", path="tags", score=2.0)
compound.filter().range("date", gte=datetime(2024, 1, 1))
search = AtlasSearchBuilder().compound(compound).build_stage()
Requirements
- Python 3.8+
- pymongo (optional, for MongoDB operations)
- typing-extensions (for Python < 3.10)
Documentation
📚 Getting Started
🔧 API Reference
- QueryFilter API - Query building methods
- AggregateBuilder API - Aggregation pipeline methods
- AtlasSearchBuilder API - Atlas Search methods
📖 Guides
- Migration Guide - Convert from raw MongoDB queries
- Performance Guide - Optimization best practices
🛠️ Development
📐 Full Documentation
- Documentation Overview - Complete documentation index
- Online documentation available at: (coming soon)
License
MIT License - see LICENSE file for details.
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Support
- GitHub Issues: Report bugs or request features
- Documentation: Full documentation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mongodb_query_builder-1.0.2.tar.gz.
File metadata
- Download URL: mongodb_query_builder-1.0.2.tar.gz
- Upload date:
- Size: 82.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d4fe0b5b2f8f60171e8b32cf7a10ad1101a5079a901177decef8c97feefa19b
|
|
| MD5 |
8ebcf9c6a526cb5ecd8edc57cf99d82b
|
|
| BLAKE2b-256 |
9ed874997dda62bbafd8ee504962dcce12afd940650d9784e93281fb360a6901
|
File details
Details for the file mongodb_query_builder-1.0.2-py3-none-any.whl.
File metadata
- Download URL: mongodb_query_builder-1.0.2-py3-none-any.whl
- Upload date:
- Size: 23.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41c52b7ac973e987e8ae4af5966152d6d84c6aaf75e892bca3fd83b51b44a3c4
|
|
| MD5 |
cd7cbd89fe9f9ac94e6314e1dcb4b9ec
|
|
| BLAKE2b-256 |
8cb64ba01d80107458acf0fd5958046720d908eb735e2b87c97668f26122dcf3
|