# @cmddevelop/query-parameters

> Translates URL query parameters for Mongoose, Express, and MongoDb

Latest version **1.0.10** (published 2019-05-22) · ISC license · 0 weekly downloads

## Install

```sh
npm install @cmddevelop/query-parameters
pnpm add @cmddevelop/query-parameters
yarn add @cmddevelop/query-parameters
bun add @cmddevelop/query-parameters
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.10 |
| Published | 2019-05-22 |
| First published | 2019-05-21 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 33.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | CMD Develop LLC |
| Maintainers | cmddevelop |
| Keywords | mongoose, mongoDb, express, URL, query, API, parser, querystring |

## Links

- npm: https://www.npmjs.com/package/@cmddevelop/query-parameters
- Repository: https://github.com/cmddevelopllc/query-parameters
- Homepage: https://github.com/cmddevelopllc/query-parameters#readme
- Issues: https://github.com/cmddevelopllc/query-parameters/issues
- npm.io page: https://npm.io/package/@cmddevelop/query-parameters

## Dependencies (2)

- [lodash](https://npm.io/package/lodash.md) ^4.17.10
- [moment](https://npm.io/package/moment.md) ^2.22.2

## Alternatives

- [angular-pipes](https://npm.io/package/angular-pipes.md) — 5.6K weekly downloads
- [@ng-web-apis/midi](https://npm.io/package/@ng-web-apis/midi.md) — 2.6K weekly downloads
- [happn-3](https://npm.io/package/happn-3.md) — 1.6K weekly downloads
- [@opensip-cli/lang-go](https://npm.io/package/@opensip-cli/lang-go.md) — 1.2K weekly downloads
- [mongoose-typescript](https://npm.io/package/mongoose-typescript.md) — 85 weekly downloads

## Recent versions

- 1.0.10 (latest) — 2019-05-22
- 1.0.9 — 2019-05-22
- 1.0.8 — 2019-05-22
- 1.0.7 — 2019-05-22
- 1.0.6 — 2019-05-22
- 1.0.5 — 2019-05-22
- 1.0.4 — 2019-05-22
- 1.0.2 — 2019-05-21
- 1.0.1 — 2019-05-21

## README

# @cmddevelop/query-parameters

[![NPM version][npm-image]][npm-url]
[![Downloads][download-badge]][npm-url]

Converts URL query string into a Mongoose friendly object. Create and object with key values for Mongoose options and filtering. 

This library was build using this [mongoose-query-parser](https://github.com/leodinas-hao/mongoose-query-parser) as a starting point. Thank you for the good work. It was used as a starting point to develop this for a custom application.

## Features

- Supports the most of MongoDB operators (`$in`, `$regexp`, `$exists`) and features including skip, sort, limit, population
- Additionally, there is a key word of `page` that can be applied in order to work with [mongoose-paginate](https://www.npmjs.com/package/mongoose-paginate)
- Auto type casting of `Number`, `RegExp`, `Date`, `Boolean` and `null`
- String templates/predefined queries (i.e. `firstName=${my_vip_list}`)
- Allows customization of keys and options in query string

## Installation
```
npm i @cmddevelop/query-parameters
```

## Usage

### API
```
import { QueryParser } from '@cmddevelop/query-parameters';

const parser = new QueryParser(options?: ParserOptions)
parser.parse(query: string, predefined: any) : QueryOptions
```

##### Arguments
- `ParserOptions`: object for advanced options (See below) [optional]
- `query`: query string part of the requested API URL (ie, `firstName=John&limit=10`). Works with already parsed object too (ie, `{status: 'success'}`) [required]
- `predefined`: object for predefined queries/string templates [optional]

#### Returns
- `QueryOptions`: object contains the following properties:
    - `filter` which contains the query criteria
    - `populate` which contains the query population. Please see [Mongoose Populate](http://mongoosejs.com/docs/populate.html) for more details
    - `select` which contains the query projection
    - `sort`, `skip`, `limit` which contains the cursor modifiers for paging purpose

#### Filtering operators

| MongoDB | URI | Example | Result |
| ------- | --- | ------- | ------ |
| `$eq` | `key=val` | `type=public` | `{filter: {type: 'public'}}` |
| `$gt` | `key>val` | `count>5` | `{filter: {count: {$gt: 5}}}` |
| `$gte` | `key>=val` | `rating>=9.5` | `{filter: {rating: {$gte: 9.5}}}` |
| `$lt` | `key<val` | `createdAt<2017-10-01` | `{filter: {createdAt: {$lt: 2017-09-30T14:00:00.000Z}}}` |
| `$lte` | `key<=val` | `score<=-5` | `{filter: {score: {$lte: -5}}}` |
| `$ne` | `key!=val` | `status!=success` | `{filter: {status: {$ne: 'success'}}}` |
| `$in` | `key=val1,val2` | `country=GB,US` | `{filter: {country: {$in: ['GB', 'US']}}}` |
| `$nin` | `key!=val1,val2` | `lang!=fr,en` | `{filter: {lang: {$nin: ['fr', 'en']}}}` |
| `$exists` | `key` | `phone` | `{filter: {phone: {$exists: true}}}` |
| `$exists` | `!key` | `!email` | `{filter: {email: {$exists: false}}}` |
| `$regex` | `key=/value/<opts>` | `email=/@gmail\.com$/i` | `{filter: {email: /@gmail.com$/i}}` |
| `$regex` | `key!=/value/<opts>` | `phone!=/^06/` | `{filter: {phone: { $not: /^06/}}}` |

For more advanced usage (`$or`, `$type`, `$elemMatch`, etc.), pass any MongoDB query filter object as JSON string in the `filter` query parameter, ie:

#### Populate operators

- Useful to populate sub-document(s) in query. Works with `MongooseJS`. Please see [Mongoose Populate](http://mongoosejs.com/docs/populate.html) for more details
- Allows to populate only selected fields
- Default operator key is `populate`

#### Skip / Limit / Page operators

- Useful to limit the number of records returned
- Default operator keys are `skip` or `page`, and `limit`

[npm-url]: https://www.npmjs.com/package/@cmddevelop/query-parameters
[npm-image]: https://img.shields.io/npm/v/@cmddevelop/query-parameters.svg?style=flat-square
[download-badge]: https://img.shields.io/npm/dm/@cmddevelop/query-parameters.svg?style=flat-square

---
_Source: https://npm.io/package/@cmddevelop/query-parameters · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
