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.
- 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 - Auto type casting of
Number
,RegExp
,Date
,Boolean
andnull
- String templates/predefined queries (i.e.
firstName=${my_vip_list}
) - Allows customization of keys and options in query string
npm i @cmddevelop/query-parameters
import { QueryParser } from '@cmddevelop/query-parameters';
const parser = new QueryParser(options?: ParserOptions)
parser.parse(query: string, predefined: any) : QueryOptions
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]
QueryOptions
: object contains the following properties:filter
which contains the query criteriapopulate
which contains the query population. Please see Mongoose Populate for more detailsselect
which contains the query projectionsort
,skip
,limit
which contains the cursor modifiers for paging purpose
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:
- 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
- Useful to limit the number of records returned
- Default operator keys are
skip
orpage
, andlimit