npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mongo-query-kit

v1.0.3

Published

A lightweight utility for MongoDB and Mongoose that handles filtering, searching, sorting, pagination, and date range queries for Express APIs.

Readme

mongo-query-kit

npm version npm downloads npm downloads License: MIT GitHub

A lightweight utility for MongoDB and Mongoose that handles filtering, searching, sorting, pagination, and date range queries for Express APIs — all from req.query.


Installation

npm install mongo-query-kit

Quick Start

import mongoQuery from "mongo-query-kit";

// Pass your Mongoose model, req.query, and options
const result = await mongoQuery(User, req.query, {
  searchFields: ["name", "email"],
});

// result = {
//   data: [...],     // Documents for current page
//   total: 100,      // Total matching documents
//   page: 1,         // Current page number
//   limit: 10,       // Items per page
//   pages: 10        // Total pages
// }

Example — step by step

1. Define a Mongoose model

import mongoose from "mongoose";

const userSchema = new mongoose.Schema(
  {
    name: String,
    email: String,
    role: { type: String, default: "user" },
    status: { type: String, default: "active" },
  },
  { timestamps: true }
);

const User = mongoose.model("User", userSchema);

2. Use it in an Express route

import express from "express";
import mongoQuery from "mongo-query-kit";
import User from "./models/User.js";

const app = express();

app.get("/users", async (req, res) => {
  try {
    const result = await mongoQuery(User, req.query, {
      searchFields: ["name", "email"],
    });
    res.json(result);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

3. Make requests

# Basic pagination
GET /users?page=1&limit=10

# Search by name or email
GET /users?search=karthik

# Filter by field
GET /users?role=admin&status=active

# Sort (prefix with - for descending)
GET /users?sort=-createdAt

# Date range
GET /users?startDate=2025-01-01&endDate=2025-12-31

# Everything together
GET /users?page=1&limit=10&search=karthik&sort=-createdAt&role=admin

That's it — no manual query building, no repetitive code.

API

mongoQuery(model, queryParams, options)

| Param | Type | Default | Description | | ----------- | ------ | ------- | -------------------- | | model | Model | required | Mongoose model | | queryParams | object | {} | Express req.query | | options | object | {} | See options below |

Options

| Option | Type | Default | Description | | ------------ | -------- | ------- | --------------------------- | | searchFields | string[] | [] | Fields to search by keyword | | select | string | null | Field projection string |

Return value

{
  data: [],    // Paginated documents
  total: 100,  // Total matching documents
  page: 1,     // Current page
  limit: 10,   // Items per page
  pages: 10    // Total pages
}

Query parameters reference

| Param | Type | Example | Description | | --------- | ------ | ------------------------------ | ------------------------ | | page | number | ?page=2 | Page number (default: 1) | | limit | number | ?limit=20 | Items per page (default: 10) | | sort | string | ?sort=-createdAt or ?sort=name | Sort field (prefix - for descending) | | search | string | ?search=karthik | Keyword search across specified fields | | startDate | string | ?startDate=2025-01-01 | Filter records created on or after this date | | endDate | string | ?endDate=2025-12-31 | Filter records created on or before this date | | Any field | string | ?role=admin&status=active | Direct field filter on the model |

Security

The following query parameters are automatically ignored to prevent dangerous query injection:

  • password
  • __proto__
  • constructor
  • prototype

Running tests

node test.js

License

MIT — feel free to use it in any project.