Skip to content

DasithKuruppu/path-to-mongodb

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

path-to-mongodb

Parse URL to MongoDB query.

Install

npm i path-to-mongodb --save

Usage

pathToMongodb(path, realPath, options);
  • path: {String} Express style path like: /users/:uid.
  • realPath: {String} Actual path like: /users/123?vip=true.
  • options: {Object}
    • queryOptions: {Object|Array} Options to preserve, see test.
    • alias: {Object} alias for query or options, eg: p=2 -> skip=20&limit=10.
    • others see path-to-regexp.

Example

pathToMongodb(
  '/posts/:year',
  '/posts/2015?__skip=20&__limit=10&(comments[$size]=10||praise>=5)',
  {queryOptions: {__skip: 'skip', __limit: 'limit'}}
);

// output

{
  "query": {
    "$or": [
      {"comments": {"$size": 10}},
      {"praise": {"$gte": 5}}
    ],
    "year": 2015
  },
  "options": {
    "skip": 20,
    "limit": 10
  }
}
function aliasLimitAndSkip(p) {
  return 'limit=10&skip=' + (p * 10);
}

pathToMongodb(
  '/posts/:year',
  '/posts/2015?((user=nswbmw||user=zk)&&(star=true||comments[$size]>=100))&p=2',
  {
    depth: Infinity,
    alias: {
      p: aliasLimitAndSkip
    }
  }
);

//output

{
    "query": {
        "$and": [{
            "$or": [{
                "user": "nswbmw"
            },
            {
                "user": "zk"
            }]
        },
        {
            "$or": [{
                "star": true
            },
            {
                "comments": {
                    "$size": {
                        "$gte": 100
                    }
                }
            }]
        }],
        "year": 2015
    },
    "options": {
        "limit": 10,
        "skip": 20
    }
}

Next, you may write like this:

mongoclient
  .db('test')
  .collection('users')
  .find(obj.query, obj.options)

see test for more details.

Test

npm test

Benchmark

node benchmark

License

MIT

About

Express style path to mongodb query.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%