json-api-mongo-parser

JSON API query parser for MongoDB/Mongoose queries.

Usage no npm install needed!

<script type="module">
  import jsonApiMongoParser from 'https://cdn.skypack.dev/json-api-mongo-parser';
</script>

README

json-api-mongo-parser

Build Status Coverage Status

JSON API query parser for MongoDB/Mongoose queries.

Convert query object from any querystring parser to MongoDB/Mongoose queries.

Installation

npm install --save json-api-mongo-parser

Usage

// Input query object for the article resource
var query = {
  fields: {
    article: 'title,body', // Can be comma delimited string or Array of string
    people: 'firstname,lastname',
    comment: 'title,body'
  },
  sort: '-title,body,+created', // Can be comma delimited string or Array of string
  page: {
    offset: 2,
    limit: 10
  },
  include: 'author,comments.tag,comments.author,comments.author.tag' // Can be comma delimited string or Array of string
}
var JSONAPIMongoParser = require(json-api-mongo-parser);

var jsonApiMongoParser = new JSONAPIMongoParser({
  article: {
    relationships: { // Declaring relationships with its type
      author: 'people', // can be a string
      comments: { // Or an object with extra options for population query
        type : 'comment',
        options: {
          lean: true
        }
      },
    }
  },
  comment: {
    relationships: {
      author: 'people',
      tag: 'tag'
    }
  },
  people: {
    relationships: {
      tag: 'tag'
    }
  }
});

// Parse
jsonApiMongoParser.parse('article', query);

Output mongo query for the article resource :

{
  select: {
    title: 1,
    body: 1,
    author: 1,
    comments: 1
  },
  sort: {
    title: -1,
    body: 1,
    created: 1
  },
  page: {
    skip: 2,
    limit: 10
  },
  populate: [{
    path: 'author',
    select: {
      firstname: 1,
      lastname: 1,
      tag: 1
    }
  }, {
    path: 'comments',
    populate: [{
      path: 'tag'
    }, {
      path: 'author',
      populate: [{
        path: 'tag'
      }],
      select: {
        firstname: 1,
        lastname: 1,
        tag: 1
      }
    }],
    select: {
      title: 1,
      body: 1,
      author: 1,
      tag: 1
    },
    options: {
      lean: true
    }
  }]
}

Requirements

json-api-mongo-parser only use ECMAScript 2015 (ES6) features supported natively by Node.js 4 and above (ECMAScript 2015 (ES6) | Node.js). Make sure that you have Node.js 4+ or above.

License

MIT