{"id":25478463,"url":"https://github.com/kucukkanat/localdb","last_synced_at":"2025-11-06T09:30:33.526Z","repository":{"id":3153300,"uuid":"44928910","full_name":"kucukkanat/LocalDB","owner":"kucukkanat","description":"MongoDB on the browser. A database using Javascript localStorage","archived":false,"fork":false,"pushed_at":"2022-12-03T03:27:35.000Z","size":1983,"stargazers_count":74,"open_issues_count":10,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-04-14T22:12:34.329Z","etag":null,"topics":["javascript","javascript-localstorage","localdb","localdb-instance","localstorage","localstorage-adapter","localstorage-api","localstorage-wrapper"],"latest_commit_sha":null,"homepage":"","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/kucukkanat.png","metadata":{"files":{"readme":"Readme.MD","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":["kucukkanat"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2015-10-25T20:44:26.000Z","updated_at":"2023-11-02T12:43:19.000Z","dependencies_parsed_at":"2023-01-11T16:14:42.511Z","dependency_job_id":null,"html_url":"https://github.com/kucukkanat/LocalDB","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kucukkanat%2FLocalDB","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kucukkanat%2FLocalDB/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kucukkanat%2FLocalDB/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kucukkanat%2FLocalDB/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kucukkanat","download_url":"https://codeload.github.com/kucukkanat/LocalDB/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239489438,"owners_count":19647389,"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":["javascript","javascript-localstorage","localdb","localdb-instance","localstorage","localstorage-adapter","localstorage-api","localstorage-wrapper"],"created_at":"2025-02-18T14:33:26.958Z","updated_at":"2025-11-06T09:30:33.481Z","avatar_url":"https://github.com/kucukkanat.png","language":"JavaScript","funding_links":["https://github.com/sponsors/kucukkanat"],"categories":[],"sub_categories":[],"readme":"# A local database implementation using localStorage API\nThis is a simple wrapper for javascript's localStorage API for a more convenient use.\n\n## Installation\n\n```\nyarn add local-db --dev\n```\nor\n```\nnpm install local-db --save-dev\n```\nor \n```\n\u003c!-- local-db will assign itself to window.LocalDB --\u003e\n\u003cscript src='https://unpkg.com/local-db'\u003e\u003c/script\u003e\n```\n## Usage\n\n```javascript\nimport LocalDB from 'local-db'\n```\nor\n```javascript\nvar LocalDB = require('local-db')\n```\n\nthen\n\n```javascript\nvar usersTable = new LocalDB('users')\n```\n\n## Methods\n\n### .create(object)\nIf object has an `.id` property, LocalDB will try to update the object in the table with \nregarding id.\n\n```javascript\nusersTable.insert({username:'kucukkanat',city:'Izmir'})\n```\n**returns :** the user object created in table with generated ID\n\n### .read(query)\nReturns an array of the elements matching the query\n\n```javascript\n// Guys you are not allowed to buy cigarettes!\nusersTable.query({age:{$lt:{18}}})\n```\n**returns :** the user object created in table with generated ID\n\n### .update(query,object)\nUpdates all objects in table matching the query. The update method does a deep merge \nusing `lodash` 's  `_.merge` method. [_.merge](https://lodash.com/docs/4.17.4#merge)\n\n```javascript\n// Moves kucukkanat from Izmir to Amsterdam\nusersTable.update({username:'kucukkanat'},{city:'Amsterdam'})\n```\n**returns :** LocalDB instance itself\n\n### .delete(query)\nDeletes all objects in table matching the query\n\n```javascript\n// Are you not a bit old for skating grandpa ?\nusersTable.delete({age:{$gt:70}})\n```\n**returns :** LocalDB instance itself\n\n### .drop()\nEmpties the table\n\n```javascript\nusersTable.drop()\n```\n**returns :** LocalDB instance itself\n\n\n### .on(eventName,fn)\nListens for events : `insert` , `create` , `update` , `remove` , `delete` , `drop`\n\n```javascript\nusers.on('$insert',(object)=\u003e{\n    // console.log(object, ' inserted!')\n})\nusers.on('$delete',(object)=\u003e{\n    // console.log(object, ' deleted!')\n})\nusers.on('$update',(object,nextObject)=\u003e{\n    console.log(object, ' updated to ',nextObject)\n})\n```\n**returns :** LocalDB instance itself\n\n\n\n## Supported Operators:\n\nSee MongoDB's [advanced queries](http://www.mongodb.org/display/DOCS/Advanced+Queries) for more info.\n\n### $in\n\narray value must be *$in* the given query:\n\nIntersecting two arrays:\n\n```javascript\n//filtered: ['Brazil']\ntable.query({ $in: ['Costa Rica','Brazil'] }, ['Brazil','Haiti','Peru','Chile']);\n```\n\nHere's another example. This acts more like the $or operator:\n\n```javascript\ntable.query({ location: { $in: ['Costa Rica','Brazil'] } }, [ { name: 'Craig', location: 'Brazil' } ]);\n```\n\n### $nin\n\nOpposite of $in:\n\n```javascript\n//filtered: ['Haiti','Peru','Chile']\ntable.query({ $nin: ['Costa Rica','Brazil'] }, ['Brazil','Haiti','Peru','Chile']);\n```\n\n### $exists\n\nChecks if whether a value exists:\n\n```javascript\n//filtered: ['Craig','Tim']\ntable.query({ $exists: true }, ['Craig',null,'Tim']);\n```\n\nYou can also filter out values that don't exist\n\n```javascript\n//filtered: [{ name: 'Craig', city: 'Minneapolis' }]\ntable.query({ city: { $exists: false } }, [ { name: 'Craig', city: 'Minneapolis' }, { name: 'Tim' }]);\n```\n\n### $gte\n\nChecks if a number is \u003e= value:\n\n```javascript\n//filtered: [2, 3]\ntable.query({ $gte: 2 }, [0, 1, 2, 3]);\n```\n\n### $gt\n\nChecks if a number is \u003e value:\n\n```javascript\n//filtered: [3]\ntable.query({ $gt: 2 }, [0, 1, 2, 3]);\n```\n\n### $lte\n\nChecks if a number is \u003c= value.\n\n```javascript\n//filtered: [0, 1, 2]\ntable.query({ $lte: 2 }, [0, 1, 2, 3]);\n```\n\n### $lt\n\nChecks if number is \u003c value.\n\n```javascript\n//filtered: [0, 1]\ntable.query({ $lt: 2 }, [0, 1, 2, 3]);\n```\n\n### $eq\n\nChecks if query == value. Note that **$eq can be omitted**. For **$eq**, and **$ne**\n\n```javascript\n//filtered: [{ state: 'MN' }]\ntable.query({ state: {$eq: 'MN' }}, [{ state: 'MN' }, { state: 'CA' }, { state: 'WI' }]);\n```\n\nOr:\n\n```javascript\n//filtered: [{ state: 'MN' }]\ntable.query({ state: 'MN' }, [{ state: 'MN' }, { state: 'CA' }, { state: 'WI' }]);\n```\n\n### $ne\n\nChecks if query != value.\n\n```javascript\n//filtered: [{ state: 'CA' }, { state: 'WI'}]\ntable.query({ state: {$ne: 'MN' }}, [{ state: 'MN' }, { state: 'CA' }, { state: 'WI' }]);\n```\n\n### $mod\n\nModulus:\n\n```javascript\n//filtered: [300, 600]\ntable.query({ $mod: [3, 0] }, [100, 200, 300, 400, 500, 600]);\n```\n\n### $all\n\nvalues must match **everything** in array:\n\n```javascript\n//filtered: [ { tags: ['books','programming','travel' ]} ]\ntable.query({ tags: {$all: ['books','programming'] }}, [\n{ tags: ['books','programming','travel' ] },\n{ tags: ['travel','cooking'] } ]);\n```\n\n### $and\n\nability to use an array of expressions. All expressions must test true.\n\n```javascript\n//filtered: [ { name: 'Craig', state: 'MN' }]\n\ntable.query({ $and: [ { name: 'Craig' }, { state: 'MN' } ] }, [\n{ name: 'Craig', state: 'MN' },\n{ name: 'Tim', state: 'MN' },\n{ name: 'Joe', state: 'CA' } ]);\n```\n\n### $or\n\nOR array of expressions.\n\n```javascript\n//filtered: [ { name: 'Craig', state: 'MN' }, { name: 'Tim', state: 'MN' }]\ntable.query({ $or: [ { name: 'Craig' }, { state: 'MN' } ] }, [\n{ name: 'Craig', state: 'MN' },\n{ name: 'Tim', state: 'MN' },\n{ name: 'Joe', state: 'CA' } ]);\n```\n\n### $nor\n\nopposite of or:\n\n```javascript\n//filtered: [ { name: 'Tim', state: 'MN' }, { name: 'Joe', state: 'CA' }]\ntable.query({ $nor: [ { name: 'Craig' }, { state: 'MN' } ] }, [\n{ name: 'Craig', state: 'MN' },\n{ name: 'Tim', state: 'MN' },\n{ name: 'Joe', state: 'CA' } ]);\n```\n\n\n### $size\n\nMatches an array - must match given size:\n\n```javascript\n//filtered: ['food','cooking']\ntable.query({ tags: { $size: 2 } }, [ { tags: ['food','cooking'] }, { tags: ['traveling'] }]);\n```\n\n### $type\n\nMatches a values based on the type\n\n```javascript\ntable.query({ $type: Date }, [new Date(), 4342, 'hello world']); //returns single date\ntable.query({ $type: String }, [new Date(), 4342, 'hello world']); //returns ['hello world']\n```\n\n### $regex\n\nMatches values based on the given regular expression\n\n```javascript\ntable.query({ $regex: /^f/i, $nin: [\"frank\"] }, [\"frank\", \"fred\", \"sam\", \"frost\"]); // [\"fred\", \"frost\"]\ntable.query({ $regex: \"^f\", $options: \"i\", $nin: [\"frank\"] }, [\"frank\", \"fred\", \"sam\", \"frost\"]); // [\"fred\", \"frost\"]\n```\n\n### $where\n\nMatches based on some javascript comparison\n\n```javascript\ntable.query({ $where: \"this.name === 'frank'\" }, [{name:'frank'},{name:'joe'}]); // [\"frank\"]\ntable.query({\n\t$where: function() {\n\t\treturn this.name === \"frank\"\n\t}\n}, [{name:'frank'},{name:'joe'}]); // [\"frank\"]\n```\n\n### $elemMatch\n\nMatches elements of array\n\n```javascript\nvar bills = [{\n    month: 'july',\n    casts: [{\n        id: 1,\n        value: 200\n    },{\n        id: 2,\n        value: 1000\n    }]\n},\n{\n    month: 'august',\n    casts: [{\n        id: 3,\n        value: 1000,\n    }, {\n        id: 4,\n        value: 4000\n    }]\n}];\n\nvar result = table.query({\n    casts: {$elemMatch:{\n        value: {$gt: 1000}\n    }}\n}, bills); // {month:'august', casts:[{id:2, value: 1000},{id: 4, value: 4000}]}\n```\n\n### $not\n\nNot expression:\n\n```javascript\ntable.query({$not:{$in:['craig','tim']}}, ['craig','tim','jake']); //['jake']\ntable.query({$not:{$size:5}}, ['craig','tim','jake']); //['tim','jake']\n```\n\n## sub object Searching\n\n\n```javascript\nvar people = [{\n\tname: 'craig',\n\taddress: {\n\t\tcity: 'Minneapolis'\n\t}\n},\n{\n\tname: 'tim',\n\taddress: {\n\t\tcity: 'St. Paul'\n\t}\n}];\n\nvar queried = table.query({ address: { city: 'Minneapolis' }}, people); // count = 1\n\n//or\nvar queried = table.query({'address.city': 'minneapolis'}, people);//count = 1\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkucukkanat%2Flocaldb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkucukkanat%2Flocaldb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkucukkanat%2Flocaldb/lists"}