使用JavaScript實現的一個類SQL的用於在前端查詢數據的類庫。基本接口參考了thinkphp查詢語法的實現。javascript
前端幹後端事的php
// 支持 umd
<script src="./build/query.js"></script>
var data = [] // 數據
var query = new Query(data)
複製代碼
[Parameter Collections]
從數據中選取一個從開始索引(start)到一個結束索引(end)之間的部分的淺拷貝出來做爲目標對象,參數同Array.prototype.slice。屢次調用以最後一次收集到的參數爲準。html
/** * @param {Number} start * @param {Number} end */
query.range(start, end)
複製代碼
query.range(0, 10)
複製代碼
[Parameter Collections]
經過內置鉤子函數(hooks)對字段進行格式化。前端
/** * @param {String} field 待格式化字段 * @param {String} type 鉤子函數名稱 * @param {Object} options 可用配置項 */
query.to(field, type, options) / query.format(field, type, options)
複製代碼
// 'createTime': '2017-09-08T15:26:03.896Z',
query.to('createTime', 'date', {args: ['yy-MM-dd'], new: 'date'})
// $date: '2017-09-08'
複製代碼
[Parameter Collections]
條件查詢語句java
/** * @param {String} field 字段 * @param {String} expression 表達式 * @param {String | Function} condition 條件 * @param {String} relation {and(default) | or} 與上次where結果的關係 */
query.where(field, expression, condition, relation)
複製代碼
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'
複製代碼
[Parameter Collections]
根據字段對結果集分組,返回新的結果集。一個字段只能分組一次。git
/** * @param {String} field 待分組的字段 */
query.group(field)
複製代碼
query.group('author')
/** * result * [ * 'smohan': {count: 22, list:[...]}, * '流雲諸葛': {count: 1, list: [...]}, * ... * ] */
複製代碼
[Parameter Collections]
用於分頁時指定開始查詢的起始行數。github
/** * @param {Number} skip 指定起始行數 */
query.skip(skip)
複製代碼
// 從第0行開始查詢
query.skip(0)
複製代碼
[Parameter Collections]
用於分頁時指定查詢的數量。thinkphp
/** * @param {Number} limit 指定查詢的數量 */
query.limit(limit)
複製代碼
// 查詢10條結果
query.limit(10)
// 從第5條開始查詢10條結果
query.skip(5).limit(10)
複製代碼
[Parameter Collections]
對查詢結果進行排序,輸出排序後的結果。express
/** * @param {String | Object} field 待排序的字段 * @param {String | void} type 排序類型 [asc|desc] */
query.sort(field, type)
複製代碼
// 按order的降序排序,若是order同樣,則再按照建立時間的降序排序
query
.sort('order', 'desc')
.sort('createTime', 'desc')
// 同時指定多個排序方式
query.sort({
create_time: 'desc',
id: 'desc',
name: 'asc'
})
複製代碼
[Export results]
返回通過查詢後的結果的總數,若是須要分頁,建議在分頁前調用該方法。後端
/** * @returns {Number} */
query.count()
複製代碼
query.count()
複製代碼
[Export results]
返回通過查詢後的結果集。
/** * @returns {Array} */
query.find()
複製代碼
query.find()
複製代碼
對數據集和查詢條件進行重置。一旦調用
find()
/count()
方法後,目標集合將會被改變,此時若是須要對源數據進行從新查詢,須要調用該方法。
query.reset()
複製代碼
query.reset()
//.where()
//...
複製代碼
銷燬實例
query.destroy()
複製代碼
[Static Method]
添加自定義格式化鉤子函數
/** * @param {String} name 鉤子名稱 * @param {function} handler 鉤子方法 */
Query.hooks(name, handler)
複製代碼
// 添加一個重置標題的鉤子函數
Query.hooks('myTitle', function(value) {
return '我是格式化後的標題:' + value
})
// use
query.to('title', 'myTitle', {new: true})
// result:
// $title: '我是格式化後的標題:title'
複製代碼
[Static Attribute]
版本號
Query.version
複製代碼