{"id":15097900,"url":"https://github.com/wivwiv/koa-queries","last_synced_at":"2026-05-07T18:05:50.887Z","repository":{"id":114630259,"uuid":"148629463","full_name":"wivwiv/koa-queries","owner":"wivwiv","description":"Convent URL query to mongoose queries","archived":false,"fork":false,"pushed_at":"2018-10-29T13:16:51.000Z","size":4,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-18T04:59:45.882Z","etag":null,"topics":["koa","koa2","koajs","middleware","mongoose","queries"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wivwiv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2018-09-13T11:43:55.000Z","updated_at":"2018-10-29T13:16:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"45f40640-3de7-4bba-827e-0f94b80e55ea","html_url":"https://github.com/wivwiv/koa-queries","commit_stats":{"total_commits":7,"total_committers":1,"mean_commits":7.0,"dds":0.0,"last_synced_commit":"eed1268ae590d7952402db05354931ac80713e7e"},"previous_names":["wiviwiv/koa-queries"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wivwiv%2Fkoa-queries","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wivwiv%2Fkoa-queries/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wivwiv%2Fkoa-queries/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wivwiv%2Fkoa-queries/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wivwiv","download_url":"https://codeload.github.com/wivwiv/koa-queries/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245854583,"owners_count":20683379,"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":["koa","koa2","koajs","middleware","mongoose","queries"],"created_at":"2024-09-25T16:41:14.608Z","updated_at":"2026-01-06T17:13:58.882Z","avatar_url":"https://github.com/wivwiv.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# koa-queries\n\nConvent URL query to mongoose queries\n\n\n### Installation\n\n`$ npm install koa-queries`\n\n\n### Usage\n\n```js\nconst app = require('koa')()\nconst koaQueries = require('koa-quires')\n \napp.use(koaQueries())\n\napp.user(async (ctx) =\u003e {\n    const { query, filter, sort,  } = ctx.state\n\n    // other\n    if (ctx.user.is_admin) {\n        query.state = 4\n    }\n\n    ctx.body = await ctx.db.News.find(query, filter)\n        // TODO: v 1.0.2 add pagination\n        // .skip(skip)\n        // .limit(limit)\n        .sort(sort)\n        \n})\n```\n\n\n### Quick Start\n\n***GET:***\n\n```bash\n/api/v1/news?catalog_is=commom\n\u0026title_startsWith=today\n\u0026viewCount_gte=100\n\u0026content.markdown_is=isNull\n\u0026_asc=createdAt\n\u0026_filter=-content,-description\n```\n\n***Queries:***\n\n```js\n// ctx.state.query\n{\n    catalog: 'common',\n    title: /^today/,\n    viewCount: { $gte: 100 },\n    'content.markdown': null,\n    // content: { markdown: null },\n}\n\n// filter\n// mongoose remove/select fields\n'-content -description'\n\n// ctx.state.sort\n{\n    createdAt: 1\n}\n```\n\n\n### API\n\n```js\n// read source..\nswitch (option) {\n        case 'filter':\n          filter = value.split(',').join(' ')\n          break\n        case 'startsWith':\n          query[key] = new RegExp(`^${value}`)\n          break\n        case 'like':\n          query[key] = new RegExp(value, 'i')\n          break\n        case 'ilike':\n          query[key] = new RegExp(['.*', ...value.split('').join('.*'), '.*'].join(''), 'gim')\n          break\n        case 'is':\n          query[key] = value\n          break\n        case 'isNull':\n          query[key] = null\n          break\n        case 'gte':\n          const $gte = Number(value)\n          if (!isNaN($gte)) {\n            query[key] = {\n              $gte\n            }\n          }\n          break\n        case 'lte':\n          const $lte = Number(value)\n          if (!isNaN($lte)) {\n            query[key] = {\n              $lte\n            }\n          }\n          break\n        case 'in':\n          const $in = value.split(',')\n          if ($in.length \u003e 0) {\n            query[key] = {\n              $in\n            }\n          }\n          break\n        case 'nin':\n          const $nin = value.split(',')\n          if ($nin.length \u003e 0) {\n            query[key] = {\n              $nin\n            }\n          }\n          break\n        case 'fresh':\n          query.expiredAt = {\n            $gte: Date.now()\n          }\n          break\n      }\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwivwiv%2Fkoa-queries","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwivwiv%2Fkoa-queries","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwivwiv%2Fkoa-queries/lists"}