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.
- ✅ Fully type-safe aggregation builder
- ✅ Auto-detect relations from model schema using generics
- ✅ Only valid
$lookupoptions suggested via IntelliSense - ✅ Supports over 20+ MongoDB stages
- ✅ Built-in support for
NestJS&Mongoose - ✅ No
anyused internally — 100% strict TypeScript - ✅ Modular, composable, extensible
- ✅ CLI/Web UI export support coming soon
npm install mongozenOr if using yarn:
yarn add mongozen
Or if using pnpm:
pnpm add mongozen
🧩 Usage
interfaceUser{id: number;name: string;}interfacePost{id: number;title: string;userId: number;}import{AggregationBuilder,AutoRelations}from'mongozen';typeModels={post: Post;user: User};constrelations: AutoRelations<Models>={post: ['user'],user: [],};constbuilder=newAggregationBuilder<Models,'post',typeofrelations>(relations);constpipeline=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:
awaitPostModel.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.
You don’t need to manually write relationships. Use AutoRelations:
constrelations: AutoRelations<Models>={post: ['user'],user: [],};It automatically checks for userId, postId etc. and maps them to available models.
- 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())
We welcome all contributions, big or small!
gitclone https://github.com/webcoderspeed/mongozen.gitcdmongozennpminstallnpmrundev- Make sure everything passes tsc --noEmit
- Include proper test cases
- Describe your feature clearly in PR title + body
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.
Made with 💚 by @webcoderspeed
MIT License © 2025