{"id":24334309,"url":"https://github.com/pranavkakde/cachejsorm","last_synced_at":"2026-04-11T09:01:59.924Z","repository":{"id":34988275,"uuid":"178407789","full_name":"pranavkakde/CacheJSORM","owner":"pranavkakde","description":"A JavaScript ORM with caching support","archived":false,"fork":false,"pushed_at":"2023-02-11T12:04:35.000Z","size":705,"stargazers_count":1,"open_issues_count":8,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2024-04-24T00:41:08.381Z","etag":null,"topics":["cache","javascript","mssql","mysql","orm","orm-library","postgres"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pranavkakde.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-29T13:11:25.000Z","updated_at":"2022-06-13T02:43:00.000Z","dependencies_parsed_at":"2023-02-18T04:20:29.559Z","dependency_job_id":null,"html_url":"https://github.com/pranavkakde/CacheJSORM","commit_stats":{"total_commits":40,"total_committers":5,"mean_commits":8.0,"dds":0.675,"last_synced_commit":"472f6bb4ca9478e757f8140fc21740d892cbd9f1"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pranavkakde%2FCacheJSORM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pranavkakde%2FCacheJSORM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pranavkakde%2FCacheJSORM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pranavkakde%2FCacheJSORM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pranavkakde","download_url":"https://codeload.github.com/pranavkakde/CacheJSORM/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243058543,"owners_count":20229396,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cache","javascript","mssql","mysql","orm","orm-library","postgres"],"created_at":"2025-01-18T04:15:23.025Z","updated_at":"2025-12-31T00:46:39.023Z","avatar_url":"https://github.com/pranavkakde.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![npm](https://img.shields.io/npm/v/cachejsorm)\n\n# CacheJSORM\n\n\nA JavaScript ORM with caching and connection pooling support. It supports CRUD operations and aggeration(group, order, outer join, left join, right join, inner join, top, limit for mysql, max, min, sum, count) for mssql, mysql and postgres.\n\nThis repo contains library code for ORM and examples to use this library. \n\nTo use this ORM;\n\n1. Clone this repo\n2. run `npm install`\n    or \n2. run `npm install cachejsorm`\n3. Setup database schema.\n4. Setup config in `server.js`, `test.js` or `testMySQL.js` .\n5. run `node server.js` to run expressjs example for using this ORM\n6. Alternatively, run `node test.js` for mssql or run `node testMySQL.js` for examples on mysql\n\nFollowing is a snapshot of example code and functions;\n\nAfter installing this package;\n\n1. create a model with table and field discription.\n\nAfter installing this package;\n\n1. Create a model with table and field details.\n\n\n    ```javascript\n    var table = require('cachejsorm').TableSchema\n    var tableMapping = require('cachejsorm').TableMapper\n    var mssqlTable ='dbo.[orders]';\n    var schema = new table(\n        {\n            OrderNumber: {type: Number}, \n            orderDate: {type: String}, \n            customerNumber:{type:Number},\n        }\n    );\n    var tabModel = new tableMapping(mssqlTable, schema);\n    module.exports=tabModel;\n    ```\n\n\n2. Create a test.js\n   1. Call model in test.js\n   2. Setup connection details\n   3. Use functions from package for CRUD, join and aggregate functions.\n\nRefer to following examples;\n\n```javascript\nvar orderModel = require('./testmodel')\n//setup configuration\nvar config={    \n    driverType: \"mssql\",    //supports mysql/mssql/pg    \n    server:'serverip',\n    database:'databasename',\n    port: 1433,\n    username:'username',\n    password: 'password',\n    cacheDuration: 10,      //duration in seconds\n    driverOptions:{\n        connectionPoolLimit: 10,\n        //trustedConnection: false  //true for integrated security\n    }\n}\norderModel.setConfig(config);\n```\n**CRUD Operations** \n```javascript\n//find based on column values \norderModel.find({OrderNumber: '123'},function(err,data){\n    if(err){\n        console.log(err);\n    }else{\n        console.log(data);\n    }\n});\n\n//find all\norderModel.find({},function(err,data){\n        if(err){\n            res.send(err);\n        }else{\n            res.send(data);\n        }\n    });\n\n//delete \norderModel.delete({OrderNumber:1234},function(err,data){\n        if(err){\n            res.send(err);\n        }else{\n            res.send(data);\n        }\n    });\n\n//Update (keyfields, field key value to update)\norderModel.update({OrderNumber:1234},{OrderQuantity: 2, customerNumber: 111},function(err,data){        \n        if(err){\n            res.send(err);\n        }else{\n            res.send(data);\n        }\n    });\n\n//insert\norderModel.insert({OrderQuantity:1, orderDate:'2019-01-01', customerNumber:111},function(err,data){\n        if(err){\n            res.send(err);\n        }else{\n            res.send(data);\n        }\n    });\n```\n**Join Conditions (join types inner, outer, left and right)**\n```javascript\n// use .join for joining multiple tables\norderModel.join(\n    {\n        _join: [{\n            _localkey: 'customerid',\n            _foreignkey: 'id',\n            _foreignTable: 'dbo.[customer]',\n            _type: 'inner',\n            _name: '$join1'     //create multiple joins with same table and name them to reference later\n        },\n        {\n            _localkey: 'id',\n            _foreignkey: 'OrderId',\n            _foreignTable: 'dbo.[OrderItem]',\n            _type: 'left',\n            _name: '$join2'     //create multiple joins with same table and name them to reference later\n        }],\n        _field: \n                [\n                    {\n                        _name: '_local.OrderNumber',\n                        _alias: 'OrderNum',\n                    },\n                    {\n                        _name: '_foreign.FirstName',    //fields to retrieve for first join \n                        _alias: 'CustomerName',\n                        _join: '$join1'\n                    },\n                    {\n                        _name: '_foreign.all',  //get all fields from second join \n                        _join: '$join2'\n                    }\n                ],\n        _filter: [      //additional filters on joins \n            {\n                _field:[{_name:'_foreign.id', _join: '$join1'}],\n                _eq:'85'    //equal\n            },\n            {\n                _field:[{_name:'_local.TotalAmount'}],\n                _gteq:'400'     //greater than equal\n            }\n        ],\n        _order: {\n            _field: \n                [\n                    {\n                        _name: '_local.OrderNumber',\n                    },\n                    {\n                        _name: '_foreign.FirstName',\n                        _join: '$join1'\n                    }\n                ],\n            _mode: 'desc'\n        },\n        _top:{_row:2}   //use _limit for driver type mysql\n    },\n    function(err,data){\n        if(err){\n            console.log(err);\n        }else{\n            console.log(data);\n        }\n    }\n)\n```\nAbove function produces following SQL Query internally to retrieve from DB;\n```sql\nSELECT  top 2 orders.OrderNumber as OrderNum ,dbo.[customer].FirstName as CustomerName ,dbo.[OrderItem].* \nFROM orders \nINNER JOIN dbo.[customer] ON orders.customerid=dbo.[customer].id \nLEFT JOIN dbo.[OrderItem] ON orders.id=dbo.[OrderItem].OrderId  \nWhere dbo.[customer].id = 85 \nand orders.TotalAmount \u003e= 400  \nOrder By orders.OrderNumber, dbo.[customer].FirstName desc\n```\n\n**Aggregate Operations (_sum, _count, _max, _min)**\n```javascript\n//Use .aggregate for _sum , _count, _max and _min functions\norderModel.aggregate(\n    {\n        _sum:{\n            _field: 'TotalAmount',\n            _alias: 'MaxAmount'\n        },\n        _group: {\n                _by: {\n                    _field: [{_name:'customerId'}]\n                },\n                _having:{\n                    _field:[{_name:'customerId'}],\n                    _eq:'10'\n                }\n            }\n        }\n    ,function(err,data){\n        if(err){\n            console.log(err);\n        }else{\n            console.log(data);\n        }\n});\n```\nAbove function produces following SQL Query internally;\n\n```sql\nSELECT sum(TotalAmount) as MaxAmount FROM orders group by customerId HAVING customerId = 10\n```\n\n```javascript\norderModel.aggregate(\n    {\n        _sum:{\n            _field: 'TotalAmount',\n            _alias: 'MaxAmount'\n        },\n        _group: {\n                _by: {\n                    _field: [{_name:'customerId'}]\n                },\n                _having:{\n                    _max: {\n                        _field: 'TotalAmount'\n                    },\n                    _gt: '500'  //greater than\n                }\n            }\n        }\n    ,function(err,data){\n        if(err){\n            console.log(err);\n        }else{\n            console.log(data);\n        }\n});\n```\nAbove function produces following SQL internally;\n\n```sql\nSELECT sum(TotalAmount) as MaxAmount FROM orders group by customerId HAVING  max(TotalAmount) \u003e 500\n```\n\n3. run `node test.js`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpranavkakde%2Fcachejsorm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpranavkakde%2Fcachejsorm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpranavkakde%2Fcachejsorm/lists"}