1.0.10 • Published 7 years ago
@cmddevelop/query-parameters v1.0.10
@cmddevelop/query-parameters
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 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
pagethat can be applied in order to work with mongoose-paginate - Auto type casting of
Number,RegExp,Date,Booleanandnull - String templates/predefined queries (i.e.
firstName=${my_vip_list}) - Allows customization of keys and options in query string
Installation
npm i @cmddevelop/query-parametersUsage
API
import { QueryParser } from '@cmddevelop/query-parameters';
const parser = new QueryParser(options?: ParserOptions)
parser.parse(query: string, predefined: any) : QueryOptionsArguments
ParserOptions: object for advanced options (See below) optionalquery: query string part of the requested API URL (ie,firstName=John&limit=10). Works with already parsed object too (ie,{status: 'success'}) requiredpredefined: object for predefined queries/string templates optional
Returns
QueryOptions: object contains the following properties:filterwhich contains the query criteriapopulatewhich contains the query population. Please see Mongoose Populate for more detailsselectwhich contains the query projectionsort,skip,limitwhich 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 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
skiporpage, andlimit