mongozen-1
Version:
Type-safe, developer-friendly MongoDB aggregation pipeline builder for TypeScript, with auto-relation support and full IntelliSense. Works great with NestJS, Mongoose, or Node.js apps.
150 lines (109 loc) β’ 3.15 kB
Markdown
# π§ mongozen
**A type-safe, intuitive, and developer-friendly MongoDB Aggregation Pipeline Builder for TypeScript.**
Designed to work seamlessly with frameworks like NestJS, Express, or any Node.js app.
---
## π Features
- β
Fully **type-safe aggregation builder**
- β
Auto-detect relations from model schema using generics
- β
Only valid `$lookup` options suggested via IntelliSense
- β
Supports over **20+ MongoDB stages**
- β
Built-in support for `NestJS` & `Mongoose`
- β
No `any` used internally β 100% strict TypeScript
- β
Modular, composable, extensible
- β
CLI/Web UI export support coming soon
---
## π¦ Installation
```bash
npm install mongozen
```
Or if using yarn:
```
yarn add mongozen
```
Or if using pnpm:
```
pnpm add mongozen
```
π§© Usage
## Step 1: Define Your Models
```typescript
interface User {
id: number;
name: string;
}
interface Post {
id: number;
title: string;
userId: number;
}
```
## Step 2: Use the Builder
```typescript
import { AggregationBuilder, AutoRelations } from 'mongozen';
type Models = { post: Post; user: User };
const relations: AutoRelations<Models> = {
post: ['user'],
user: [],
};
const builder = new AggregationBuilder<Models, 'post', typeof relations>(relations);
const pipeline = builder
.match({ title: { $exists: true } })
.lookup({
from: 'user',
localField: 'userId',
foreignField: 'id',
as: 'userInfo',
})
.project({ title: 1, userInfo: 1 })
.sort({ title: 1 })
.build();
```
Now you can use this pipeline in Mongoose, MongoClient, or any MongoDB driver:
```typescript
await PostModel.aggregate(pipeline).exec();
```
π Supported Stages
- $match, $sort, $project, $limit, $skip, $count
- $lookup (with relation validation)
- $group, $unwind, $set, $unset, $addFields
- $replaceRoot, $replaceWith
- $unionWith, $out, $merge
- $facet
More advanced stages like $graphLookup, $setWindowFields coming soon.
## π AutoRelations
You donβt need to manually write relationships. Use AutoRelations:
```typescript
const relations: AutoRelations<Models> = {
post: ['user'],
user: [],
};
```
It automatically checks for userId, postId etc. and maps them to available models.
## π Roadmap
- CLI Support (mongozen build query.ts --out pipeline.json)
- Web UI (drag & drop stages, export pipeline)
- VSCode Extension
- Prisma adapter / Mongoose schema reader
- More custom DSLs (like fromQuery())
## π₯ Contributing
We welcome all contributions, big or small!
## π Setup
```typescript
git clone https://github.com/webcoderspeed/mongozen.git
cd mongozen
npm install
```
## π§βπ» Run Locally
```typescript
npm run dev
```
## π’ Open PRs
- Make sure everything passes tsc --noEmit
- Include proper test cases
- Describe your feature clearly in PR title + body
## π‘ Inspiration
This project was born out of frustration from untyped, verbose, and unsafe aggregation queries. We wanted an elegant and IntelliSense-powered DSL to write complex queries faster β hence, mongozen.
## π§ Author
Made with π by @webcoderspeed
## π License
MIT License Β© 2025