1.0.10 • Published 5 years ago

@cmddevelop/query-parameters v1.0.10

Weekly downloads
1
License
ISC
Repository
github
Last release
5 years ago

@cmddevelop/query-parameters

NPM version Downloads

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 page that can be applied in order to work with 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 for more details
    • select which contains the query projection
    • sort, skip, limit which contains the cursor modifiers for paging purpose

Filtering operators

MongoDBURIExampleResult
$eqkey=valtype=public{filter: {type: 'public'}}
$gtkey>valcount>5{filter: {count: {$gt: 5}}}
$gtekey>=valrating>=9.5{filter: {rating: {$gte: 9.5}}}
$ltkey<valcreatedAt<2017-10-01{filter: {createdAt: {$lt: 2017-09-30T14:00:00.000Z}}}
$ltekey<=valscore<=-5{filter: {score: {$lte: -5}}}
$nekey!=valstatus!=success{filter: {status: {$ne: 'success'}}}
$inkey=val1,val2country=GB,US{filter: {country: {$in: ['GB', 'US']}}}
$ninkey!=val1,val2lang!=fr,en{filter: {lang: {$nin: ['fr', 'en']}}}
$existskeyphone{filter: {phone: {$exists: true}}}
$exists!key!email{filter: {email: {$exists: false}}}
$regexkey=/value/<opts>email=/@gmail\.com$/i{filter: {email: /@gmail.com$/i}}
$regexkey!=/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 skip or page, and limit
1.0.10

5 years ago

1.0.9

5 years ago

1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago