资讯专栏INFORMATION COLUMN

Query.js - 类SQL前端数据查询类库

stackvoid / 2092人阅读

摘要:使用实现的一个类的用于在前端查询数据的类库。通过内置钩子函数对字段进行格式化。对数据集和查询条件进行重置。销毁实例静态方法属性添加自定义格式化钩子函数钩子名称钩子方法添加一个重置标题的钩子函数我是格式化后的标题我是格式化后的标题版本号

使用JavaScript实现的一个类SQL的用于在前端查询数据的类库。基本接口参考了thinkphp查询语法的实现。

Example Github 如何使用
// 支持 umd

var data = [] // 数据
var query = new Query(data)
实例方法 range
Description
[Parameter Collections] 从数据中选取一个从开始索引(start)到一个结束索引(end)之间的部分的浅拷贝出来作为目标对象,参数同Array.prototype.slice。多次调用以最后一次收集到的参数为准。
Syntax
/**
 * @param {Number} start
 * @param {Number} end 
 */
query.range(start, end)
Example
query.range(0, 10)
to/format
Description
[Parameter Collections] 通过内置钩子函数(hooks)对字段进行格式化。
Document
内置钩子函数(format hooks)
Syntax
/**
 * @param {String} field 待格式化字段
 * @param {String} type 钩子函数名称
 * @param {Object} options 可用配置项
 */
query.to(field, type, options) / query.format(field, type, options)
Example
// "createTime": "2017-09-08T15:26:03.896Z",
query.to("createTime", "date", {args: ["yy-MM-dd"], new: "date"})
// $date: "2017-09-08"
where
Description
[Parameter Collections] 条件查询语句
Document
Syntax
/**
 * @param {String} field 字段
 * @param {String} expression 表达式
 * @param {String | Function} condition 条件
 * @param {String} relation {and(default) | or} 与上次where结果的关系
 */
query.where(field, expression, condition, relation)
Example
query
  .where("author", "eq", "smohan")
  .where([["title", "like", "javascript"], ["tags", "like", "javascript", "or"] ])
  .where("count.comments", "gt", 0)
// author === "smohan" && (title like "javascript" || tags like "javascript") && "count.comments > 0"     
group
Description
[Parameter Collections] 根据字段对结果集分组,返回新的结果集。一个字段只能分组一次。
Syntax
/**
 * @param {String} field 待分组的字段
 */
query.group(field)
Example
query.group("author")
/**
 * result
 * [
 *   "smohan": {count: 22, list:[...]},
 *   "流云诸葛": {count: 1, list: [...]},
 *   ...   
 * ]
 */     
skip
Description
[Parameter Collections] 用于分页时指定开始查询的起始行数。
Syntax
/**
 * @param {Number} skip 指定起始行数
 */
query.skip(skip)
Example
// 从第0行开始查询
query.skip(0)     
limit
Description
[Parameter Collections] 用于分页时指定查询的数量。
Syntax
/**
 * @param {Number} limit 指定查询的数量
 */
query.limit(limit)
Example
// 查询10条结果
query.limit(10)
// 从第5条开始查询10条结果
query.skip(5).limit(10)     
sort
Description
[Parameter Collections] 对查询结果进行排序,输出排序后的结果。
Syntax
/**
 * @param {String | Object} field 待排序的字段
 * @param {String | void} type 排序类型 [asc|desc]
 */
query.sort(field, type)
Example
// 按order的降序排序,如果order一样,则再按照创建时间的降序排序
query
  .sort("order", "desc")
  .sort("createTime", "desc")

// 同时指定多个排序方式
query.sort({
  create_time: "desc",
  id: "desc",
  name: "asc"
})
count
Description
[Export results] 返回经过查询后的结果的总数,如果需要分页,建议在分页前调用该方法。
Syntax
/**
 * @returns {Number}
 */
query.count()
Example
query.count()
find
Description
[Export results] 返回经过查询后的结果集。
Syntax
/**
 * @returns {Array}
 */
query.find()
Example
query.find()
reset
Description
对数据集和查询条件进行重置。一旦调用find()/count()方法后,目标集合将会被改变,此时如果需要对源数据进行重新查询,需要调用该方法。
Syntax
query.reset()
Example
query.reset()
//.where()
//...
destroy
Description
销毁实例
Syntax
query.destroy()
静态方法/属性 hooks
Description
[Static Method] 添加自定义格式化钩子函数
Syntax
/**
 * @param {String} name 钩子名称
 * @param {function} handler 钩子方法
 */
Query.hooks(name, handler)
Example
// 添加一个重置标题的钩子函数
Query.hooks("myTitle", function(value) {
  return "我是格式化后的标题:" + value
})

// use
query.to("title", "myTitle", {new: true})
// result: 
// $title: "我是格式化后的标题:title"
version
Description
[Static Attribute] 版本号
Syntax
Query.version
Example Github

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32266.html

相关文章

  • Query.js - SQL前端数据查询

    摘要:使用实现的一个类的用于在前端查询数据的类库。通过内置钩子函数对字段进行格式化。对数据集和查询条件进行重置。销毁实例静态方法属性添加自定义格式化钩子函数钩子名称钩子方法添加一个重置标题的钩子函数我是格式化后的标题我是格式化后的标题版本号 使用JavaScript实现的一个类SQL的用于在前端查询数据的类库。基本接口参考了thinkphp查询语法的实现。 Example Github 如何...

    MASAILA 评论0 收藏0
  • 第一篇开发总结

    摘要:文件对比插件俄罗斯方块,无聊的时候可以放松一下内置浏览器,编写代码时,可一键预览,轻量文件对比软件这个你懂的反编译工具性能调试工具虚拟工具开发者社区墙电子书 前言 常言道,磨刀不误砍柴工,好的工具能让你事半功倍,所以多花点时间看一些工具,可以很好的提高编程效率,以下是我是觉得对我编程有很大帮助的工具: Visual Studio ReSharper VS写代码绝佳助手,耗内存...

    Crazy_Coder 评论0 收藏0
  • nodejs如何简洁优雅的访问mysql数据

    摘要:如何简洁优雅的访问数据库一前言诞生以来出现了一大批的框架如等等,前端可以不再依赖后端可以自己控制服务端的逻辑。今天我们就来说说前端在中如何操作数据库。 nodejs如何简洁优雅的访问mysql数据库一、前言nodejs诞生以来出现了一大批的web框架如express koa2 egg等等,前端可以不再依赖后端可以自己控制服务端的逻辑。今天我们就来说说前端在nodejs中如何操作mysq...

    jlanglang 评论0 收藏0
  • 贴一贴我的后端开发面试题

    摘要:线程有几种状态生命周期是怎样的线程有五种状态创建就绪运行阻塞死亡。当线程获得到等待的资源资源或者引起阻塞的条件得到满足时调用或,会从阻塞状态进入就绪状态。使用,允许最多个线程同时访问资源。 转载请注明出处: 贴一贴我的后端开发面试题。 本文是面试回寝室后凭记忆罗列出来的问题,大概90%的问题都在这里面了,有几个问题的实在是想不起来了= =,有些问题自我感觉回答的不好,所以我是查了资料...

    Batkid 评论0 收藏0
  • 开发后台项目的套路是什么?

    摘要:跨部门沟通沟通确定后,沟通结果以邮件的形式确认抄送相关。创建更改数据库根据公司要求规范操作数据表,确定后邮件抄送相关开发。静态页面开发目前后台项目大部分使用,自己拼页面即可。更新将自己开发的功能模块,部署到上。 需求评估 产品经理、开发工程师、测试工程师,组织需求评审会议,讲解本次的开发功能。 开发需分析: 是否涉及到其他开发部门? 是否需要创建数据库/数据表? 本次需要做多少页面?...

    whjin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<