1.3.2 • Published 6 years ago

mongo-to-sql v1.3.2

Weekly downloads
8
License
MIT
Repository
github
Last release
6 years ago

MongoToSQL - Convert MongoDB aggregation pipelines to their SQL equivalent

Notes

  • Some pipelines throw errors so it would be safer to wrap all library function call in a try..catch block.
  • When a $match stage is immediately followed by a $project stage, an optimization will kick in where the headless output of the $project will be appended with the headless output of the $match to avoid an unnecessary subquery.

Supported pipelines


Supported $group operators


  • $sum
    • NOTE: $sum currently does not support nested operators or multiple expressions through an array.

$lookup


$lookup as per the MongoDB documentation performs a left outer join. This behaviour has been mirrored here. To change the type of join, please specify the joinType key in the $lookup object.

The difference with the as key is that it takes an object that will map from the result to the table that is being joined with.

For example:

    $lookup({
        from: "states",
        localField: "state_id",
        foreignField: "id",
        as: {
            stateName: "name",
            stateId: "id"
        }
    })

will return

    SELECT t2.name as stateName, t2.id as stateId FROM (SELECT * FROM currentTable) t1 LEFT JOIN (SELECT * FROM states) t2 ON t1.state_id = t2.id

$match usage

$match(matchObject, tableName, options)
  • options (optional): A hashmap of options
    • headless: Should the SELECT * FROM tableName be included. Defaults to true.

Example usage

$match({
    status: "D",
    qty: 2
}, 
"inventory", 
{
    headless: true
});

will return

WHERE status = 'D' AND qty = 2

Without the headless option specified, it will return

SELECT * FROM inventory WHERE status = 'D' AND qty = 2

$match notes

Example Usage


For a complete understanding and set of examples for how to use this library, please refer to the tests folder.

Using $sum:

let collectionName = "loginstore";

mongoToSQL.convert(collectionName, [
    {"$group": {
        count: {
            "$sum": 1
        },
        age: "$age"
    }}
]);
1.3.2

6 years ago

1.3.1

6 years ago

1.3.0

6 years ago

1.2.2

6 years ago

1.2.1

6 years ago

1.2.0

6 years ago