Skip to content

A query builder for MongoDB, built to provide a rich and dynamic query building interface.

License

Notifications You must be signed in to change notification settings

query-easy/mongo

Repository files navigation

@query-easy/mongo

npm version Language grade: JavaScript Build Status Coverage Status dependencies Status devDependencies Status

A query builder for MongoDB, built to provide a rich and dynamic query building interface.

Contents

Examples

Getting Started

const qe = require('@query-easy/mongo');
const query = qe('office_collection')
  .eq('character_name', 'Michael Scott')
  .or((cb) => {
    cb.in('fav_restaurants', ['chillis', 'benihana'])
  })
  .all('hobbies', ['parkour', 'rap'])
  .regex('prison_name', new RegExp('prisonmike', 'i'))
  .offset(5)
  .raw('age', '>=', 96)
  .exists('department', true)
  .raw('sort', ['name', 'age'])
  .toQuery();

/*
query = {
  filter: {
    character_name: 'Michael Scott',
    $or: [
      {fav_restaurants: {'$in': ['chillis', 'benihana']}},
    ]
    hobbies: {'$all': ['parkour', 'rap']},
    prison_name: {'$regex': /prisonmike/i},
    age: {'$gte': 96},
    department: {'$exists': true}
  },
  options: {
    skip: 5, sort: {name: 1, age: 1}
  }
}
*/

More examples here

Working with mongodb and mongoose

const qe = require('@query-easy/mongo');
const query = qe('office_collection')
  .eq('character_name', 'Michael Scott')
  .or((cb) => {
    cb.in('fav_restaurants', ['chillis', 'benihana'])
  })
  .all('hobbies', ['parkour', 'rap'])
  .regex('prison_name', new RegExp('prisonmike', 'i'))
  .offset(5)
  .raw('age', '>=', 96)
  .exists('department', true)
  .raw('sort', ['name', 'age'])
  .toQuery();

// MongoDB Ex.
let collection = mongodb().collection('office_collection');
collection.find(
  query.filter,
  query.options
).toArray((err, docs) => {
  // do some stuff...
})

// Mongoose Ex.
let filter = query.filter;
let options = query.options;

// Following line is added because mongoose find() does not want projection in options
let projection = query.options.projection;
delete options.projection;

MongooseModel.find(filter, projection, options, (err, docs) => {
  // do some stuff...
})

Full API matrix

Refer API.md