Socket
Book a DemoInstallSign in
Socket

@sachin-chourasiya/mongoose-aggregation-builder

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@sachin-chourasiya/mongoose-aggregation-builder

A secure, chainable MongoDB aggregation builder for Mongoose with input validation and safe defaults.

1.0.0
latest
npmnpm
Version published
Weekly downloads
3
Maintainers
1
Weekly downloads
Β 
Created
Source

@sachin-chourasiya/mongoose-aggregation-builder

A simple, secure, and chainable MongoDB aggregation pipeline builder for Mongoose.
It makes complex aggregation queries easier to write, readable, and safe from injection risks.

πŸš€ Why Use This?

Writing raw MongoDB aggregation pipelines can be verbose and hard to maintain:

User.aggregate([
  { $match: { status: 'active' } },
  {
    $lookup: {
      from: 'orders',
      localField: '_id',
      foreignField: 'userId',
      as: 'orders',
    },
  },
  { $unwind: { path: '$orders', preserveNullAndEmptyArrays: true } },
  { $group: { _id: '$_id', totalOrders: { $sum: 1 } } },
  { $sort: { totalOrders: -1 } },
  { $limit: 10 },
]);

With @sachin-chourasiya/mongoose-aggregation-builder:

const pipeline = Agg()
  .filter({ status: 'active' })
  .join('orders', '_id', 'userId', 'orders')
  .unwind('orders', true)
  .countOrders()
  .sortBy('totalOrders', 'desc')
  .limit(10)
  .build();

User.aggregate(pipeline);

πŸ“¦ Installation

npm install @sachin-chourasiya/mongoose-aggregation-builder

✨ Features

  • Chainable API β†’ Build pipelines step-by-step
  • Secure β†’ Sanitizes field names and prevents malicious stages
  • Readable β†’ No more deeply nested arrays of objects
  • Reusable β†’ Save and reuse pipelines easily
  • TypeScript Friendly β†’ Works with .d.ts type definitions (coming soon)

πŸ“š Usage Examples

Example 1 β€” Basic Filtering & Projection

const Agg = require('@sachin-chourasiya/mongoose-aggregation-builder');

const pipeline = Agg()
  .filter({ isActive: true })
  .project({ name: 1, email: 1 })
  .build();

User.aggregate(pipeline);

Generated Pipeline:

[{ $match: { isActive: true } }, { $project: { name: 1, email: 1 } }];

Example 2 β€” Join with Another Collection

const pipeline = Agg()
  .filter({ status: 'active' })
  .join('orders', '_id', 'userId', 'orders')
  .unwind('orders')
  .build();

User.aggregate(pipeline);

Generated Pipeline:

[
  { $match: { status: 'active' } },
  {
    $lookup: {
      from: 'orders',
      localField: '_id',
      foreignField: 'userId',
      as: 'orders',
    },
  },
  { $unwind: '$orders' },
];

Example 3 β€” Counting & Sorting

const pipeline = Agg()
  .filter({ status: 'active' })
  .groupBy('_id', { totalOrders: { $sum: 1 } })
  .sortBy('totalOrders', 'desc')
  .limit(5)
  .build();

User.aggregate(pipeline);

πŸ›‘ Security

  • Field Name Sanitization β€” prevents $ operator injection in keys
  • Safe Stage Restriction β€” only allows MongoDB stages you enable
  • No Eval or Function Execution β€” pure JSON pipelines
  • Input Validation β€” ensures correct data types for filters, sorting, etc.

πŸ“– API Reference

.filter(query)

Adds a $match stage to filter documents.

.project(fields)

Adds a $project stage.

.join(collection, localField, foreignField, as)

Adds a $lookup stage to join another collection.

.unwind(path, preserveNull = false)

Adds a $unwind stage.

.groupBy(id, accumulators)

Adds a $group stage.

.countOrders()

Custom helper β†’ counts number of joined documents.

.sortBy(field, order = "asc")

Adds a $sort stage.

.limit(n)

Adds a $limit stage.

.build()

Returns the final aggregation pipeline array.

πŸ“„ License

MIT License Β© 2025

Keywords

mongoose

FAQs

Package last updated on 10 Aug 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚑️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.