Convert SQL statements to mongo queries or aggregates
npm install @synatic/noqlNoQL Converts SQL statements to Mongo find statements or aggregation pipelines. NoQL supports mySQL and Postgres Syntax, and generates Mongo 3.6 or greater compatible queries.
For full docs and a playground to try NoQL out, visit https://noql.synatic.dev/
Install NoQL using the npm install command:
``bash`
npm i @synatic/noql
NoQL outputs an object with the type, either query or aggregate, along with the components of the Mongo query. To use the output object, construct a query with MongoClient from the MongoDB NodeJS Driver:
`js
const SQLParser = require('@synatic/noql');
const {MongoClient} = require('mongodb');
(async () => {
try {
client = new MongoClient('mongodb://127.0.0.1:27017');
await client.connect();
const db = client.db('noql-test');
const parsedSQL = SQLParser.parseSQL('select id from films limit 10');`
if (parsedSQL.type === 'query') {
console.log(
await db
.collection(parsedSQL.collection)
.find(parsedSQL.query || {}, parsedSQL.projection || {})
.limit(parsedSQL.limit || 50)
.toArray()
);
} else if (parsedSQL.type === 'aggregate') {
console.log(
await db
.collection(parsedSQL.collections[0])
.aggregate(parsedSQL.pipeline)
.toArray()
);
}
} catch (exp) {
console.error(exp);
}
})();
NoQL outputs an object with the type, either query or aggregate, along with the components of the Mongo query. Here are some examples of the output:
For a straight query:
`jsfilms
SQLMongoParser.parseSQL('select id from where id > 10 limit 10');`
NoQL will output:
`json`
{
"limit": 10,
"collection": "films",
"projection": {
"id": "$id"
},
"query": {
"id": {
"$gt": 10
}
},
"type": "query"
}
For an aggregate query:
`jsfilms
SQLMongoParser.makeMongoAggregate(
'select id from where id > 10 group by id'`
);
NoQL will output:
`json``
{
"pipeline": [
{
"$match": {
"id": {
"$gt": 10
}
}
},
{
"$group": {
"_id": {
"id": "$id"
}
}
},
{
"$project": {
"id": "$_id.id",
"_id": 0
}
}
],
"collections": ["films"]
}
- Over
- CTE's
- Pivot
- Union
See more in the full docs at https://noql.synatic.dev/