Code Monkey home page Code Monkey logo

lucaskenda / node-mongo-querystring Goto Github PK

View Code? Open in Web Editor NEW

This project forked from turistforeningen/node-mongo-querystring

0.0 2.0 0.0 108 KB

Query builder for accepting URL query parameters into your MongoDB queries. Safe and feature rich. Supports most of MongoDB's query operators such as $eq, $gt, $lt, $ne, $in, $nin, $exists, $regex, geospatial queries such as bbox and near, as well as your own custom query business logic!

License: MIT License

JavaScript 100.00%

node-mongo-querystring's Introduction

MongoDB QueryString Parser

Build status Codacy grade Codacy coverage NPM downloads NPM version Node version Dependency status

Accept MongoDB query parameters through URI queries safe and easy. This is useful when building an API and accepting various user specificed queries.

Features

  • Aliased query parameters
  • Blacklisted query parameters
  • Whitelisted query parameters
  • Basic operators
    • $eq
    • $gt
    • $gte
    • $lt
    • $lte
    • $ne
    • $in
    • $nin
    • $exists
    • $regex
  • Parse string integers and floats to numbers
  • Parse string boolean to ture/false booleans
operation query string query object
equal ?foo=bar { foo: "bar" }
unequal ?foo=!bar { foo: { $ne: "bar" }}
exists ?foo= { foo: { $exists: true }}
not exists ?foo=! { foo: { $exists: false }}
greater than ?foo=>10 { foo: { $gt: 10 }}
less than ?foo=<10 { foo: { $lt: 10 }}
greater than or equal to ?foo=>=10 { foo: { $gte: 10 }}
less than or equal to ?foo=<=10 { foo: { $lte: 10 }}
starts with ?foo=^bar { foo: { $regex: "^bar", $options: "i" }}
ends with ?foo=$bar { foo: { $regex: "bar$", $options: "i" }}
contains ?foo=~bar { foo: { $regex: "bar", $options: "i" }}
in array ?foo[]=bar&foo[]=baz { foo: { $in: ['bar', 'baz'] }}
not in array ?foo[]=!bar&foo[]=!baz { foo: { $nin: ['bar', 'baz'] }}
  • Geospatial operators
    • $geoWithin (polygon)
    • $near (point)
operation query string query object
bbox ?bbox=0,1,2,3 { geojson: { $geoWithin: { $geometry: { … } } } }
near ?near=0,1 { geojson: { $near: { $geometry: { … } } } }
near (max distance) ?near=0,1,2 { geojson: { $near: { …, $maxDistance: 2 } } }
near (max & min distance) ?near=0,1,2,3 { geojson: { $near: { …, $minDistance: 3 } } }
  • Custom query functions
    • after (date)
    • before (date)
    • between (date|date)
operation query string query object
after ?after=2014-01-01 { endret: { $gte: "2014-01-01T00:00:00.000Z" } }
after ?after=1388534400 { endret: { $gte: "2014-01-01T00:00:00.000Z" } }
before ?before=2014-01-01 { endret: { $lt: "2014-01-01T00:00:00.000Z" } }
before ?before=1388534400 { endret: { $lt: "2014-01-01T00:00:00.000Z" } }
between `?between=2014-01-01 2015-01-01`
between `?between=1388534400 1420088400`

Install

npm install mongo-querystring --save

API

var MongoQS = require('mongo-querystring');

new MongoQS(object options)

  • Array ops - list of supported operators (default: ['!', '^', '$', '~', '>', '<', '$in'])
  • object alias - query param aliases (default: {})
  • object blacklist - blacklisted query params (default: {})
  • object whitelist - whitelisted query params (default: {})
  • object custom - custom query params (default: {})
  • object string - string parsing
    • boolean toBoolean - parse "true", "false" string to booleans (default: true)
    • boolean toNumber - parse string integer and float values to numbers (default: true)
  • regexp keyRegex - allowed key names (default: /^[a-zæøå0-9-_.]+$/i)
  • regexp arrRegex - allowed array key names (default: /^[a-zæøå0-9-_.]+(\[\])?$/i)

Bult in custom queries

  • bbox - bounding box geostatial query
  • near - proximity geostatial query
  • after - modified since query
var qs = new MongoQS({
  custom: {
    bbox: 'geojson',        // your geometry field
    near: 'geojson',        // your geometry field
    after: 'updated_on'     // your last modified field
  }
});

Define custom queries

Custom queries are on the folling form; you define the URL query parameter name that your users will be using and a function which takes the result query object and the value for query parameter.

var qs = new MongoQS({
  custom: {
    urlQueryParamName: function(query, input) {
      // do some processing of input value
      // add your queries to the query object
      query['someField'] = input;
      query['someOtherFiled'] = 'some value';
    }
  }
});

qs.parse(object params)

Params is an object with URI query params and their values. Ex. req.params if you are working with ExpressJS.

var query = qs.parse(req.params);

mongo.collection('mycol').find(query, field).toArray(function(err, documents) {
  // matching documents
});

Collaborators

Individuals making significant and valuable contributions are made Collaborators and given commit-access to the project. These individuals are identified by the existing Collaborators and their addition as Collaborators is discussed as a pull request to this project's README.md.

Note: If you make a significant contribution and are not considered for commit-access log an issue or contact one of the Collaborators directly.

  • Andy Klimczak - @andyklimczak
  • Hans Kristian Flaatten - @Starefossen
  • Edward Knowles - @eknowles

node-mongo-querystring's People

Contributors

andyklimczak avatar eknowles avatar greenkeeperio-bot avatar starefossen avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.