Query.js - 類SQL前端數據查詢類庫

運用JavaScript完成的一個類SQL的用於在前端查詢數據的類庫。基礎接口參考了thinkphp查詢語法的完成。

Example

Github

怎樣運用

// 支撐 umd
<script src="./build/query.js"></script>
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

    原文作者:Smohan
    原文地址: https://segmentfault.com/a/1190000014933870
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞