0.0.3 • Published 2 years ago

@tibeoh/mongodb-query-builder v0.0.3

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

Builder for MongoDB

Features

  • Build params object for MongoDB queries
  • Create filters object readable and it will be transform for the MongoDB parameter syntax

Installation

npm i @tibeoh/mongodb-query-builder

How to use?

const DDBBuilder = require("mongodb-query-builder");

let filters = {
  meta_data: {
    "number_of_views ($GT)": 1000000
  }
};

let mongoDBBuilder = new DDBBuilder.MongoDBBuilder();

let params = mongoDBBuilder
  .setFilters(filters)
  .build();

Now you have to use params variable for your MongoDB query.

mongoose.model.find(params).then(values => {
  console.log(values)
})

MongoDBBuilder documentation

It's just an interface to call MongoDBExpressionBuilder. It will return your filters parse as Mongo (or mongoose) should use it

MongoDBExpressionBuilder documentation

List of operators:

  • (\$IS)
  • (\$IS NOT)
  • (\$IN)
  • (\$GT)
  • (\$GTE)
  • (\$LT)
  • (\$LTE)
  • (\$BETWEEN)
  • (\$NOT) It's the only one to be use before an other operator.
  • (\$OR)
  • (\$CONTAINS)
  • (\$EXISTS)
  • (\$OUTSIDE)
  • (\$BEGIN WITH)

Examples

let filters = {
  meta_data: {
    "year": 2018,                                           // meta_data.year = 2018
    "original_language ($IS)": "English",                   // meta_data.original_language = "English",
    "runtime ($LTE)" : 5400,                                // meta_data.runtime <= 5400
    "producer ($IN)": ["Avi Arad", "Syed Aman Bachchan"],   // meta_data.producer IN ("Avi Arad", "Syed Aman Bachchan")
    "revenue ($GT)": 10000000,                              // meta_data.revenue > 10000000
    "vote_average ($GTE)": 4,                               // vote_average >= 5
    "budget ($BETWEEN)": { min: 10000000, max: 200000000},  // meta_data.budget BETWEEN 10000000 AND 200000000
    "vote_count ($NOT) ($LT)": 20000                        // NOT meta_data.vote_count < 20000
  }
};

Query looks like:

{
  "meta_data.year": 2018,
  "meta_data.original_language": "English",
  "meta_data.runtime": { $lte: 5400 },
  "meta_data.producer": { $in: ["Avi Arad", "Syed Aman Bachchan"] },
  "meta_data.revenue": { $gt 1000000 },
  "meta_data.vote_average": { $gte: 4 },
  "meta_data.budget": { $gte: 10000000, $lte 200000000 },
  "meta_data.vote_count": { $gt: 20000 }
}

Particularity : (\$OR) and (\$AND) should be the key of the object.

let filters = {
  meta_data: {
    "($OR)": [
      {"vote_count ($NOT) ($LT)": 20000},
      {"vote_average ($GTE)": 4}
    ]
  }
};

TODO

  • Add Comparison Operator and Function Reference missing: ("(\$BEGINS WITH)", "attribute_exists", "attribute_not_exists", "attribute_type")
0.0.3

2 years ago

0.0.2

5 years ago