查询

操作步骤

1.通过 tableID 实例化一个 TableObject 对象,操作该对象即相当于操作对应的数据表

let MyTableObject = new BaaS.TableObject(tableID)

参数说明

参数 类型 必填 说明
tableID Number 数据表 ID

2.实例化一个 Query 对象,在该对象上添加查询条件

let query = new BaaS.Query()

查看下面的文档,了解目前支持的查询条件

3.支持查询条件并执行查找操作

MyTableObject.setQuery(query).find()

示例

请求示例

  1. // 实例化查询对象
  2. let query = new BaaS.Query()
  3. // 设置查询条件(比较、字符串包含、组合等)
  4. ...
  5. // 应用查询对象
  6. let Product = new BaaS.TableObject(tableID)
  7. Product.setQuery(query).find().then(res => {
  8. // success
  9. }, err => {
  10. // err
  11. })
  12. // 不设置查询条件
  13. Product.find().then()

返回示例 (res.statusCode === 200)

res.data:

  1. {
  2. "meta": {
  3. "limit": 20,
  4. "next": null,
  5. "offset": 0,
  6. "previous": null,
  7. "total_count": 3
  8. },
  9. "objects": [
  10. {
  11. "_id": "59a3c2b5afb7766a5ec6e84e",
  12. "amount": 0,
  13. "created_at": 1503904437,
  14. "created_by": 36395395,
  15. "desc": ["good", 'great'],
  16. "id": "59a3c2b5afb7766a5ec6e84e",
  17. "name": "apple",
  18. "price": 1.0,
  19. "read_perm": ["user:*"],
  20. "updated_at": 1503904437,
  21. "write_perm": ["user:*"]
  22. },
  23. ...
  24. ]
  25. }

比较查询

query.compare(key, operator, value)

operator 包含 =, !=, <, <=, >, >=

  1. query.compare('amount', '>', 1)

多个查询条件

当存在多个查询条件时,它们之间默认为 AND 关系,查询返回满足所有条件的记录,如下示例,

  1. // 查询满足 1 <= amount < 10 的记录
  2. query.compare('amount', '>=', 1)
  3. query.compare('amount', '<', 10)

多个查询条件之间需要更复杂的组合关系,可以查看以下 复杂组合查询 小节

字符串查询

  1. query.contains('name', 'apple')

也支持正则匹配 ( * sdk version >= v1.1.1 )

  1. query.matches('name', regExp)

构建一个 regExp 可通过以下两种方法之一:

  • 使用正则表达式字面量

    1. const regExp = /^abc/i
  • 调用 RegExp 对象的构造函数

    1. const regExp = new RegExp('^abc', 'i')

正则匹配示例

  1. /* 以查找手机号码为例,phoneNumber 字段必须为 string 类型 */
  2. let regExp
  3. // 查找 以 188 开头的手机号码
  4. regExp = /^188/
  5. // 查找 以 708 结尾的手机号码
  6. regx = /708$/
  7. // 查找 以 188 开头的手机号码,以 708 结尾的手机号码
  8. regx = /^188\d+708$/
  9. query.matches('phoneNumber', regx)

数组查询

field 的类型不限制,field 的 value 含有 array 中的一个或多个

  1. query.in(fieldName, array)

field 的类型不限制,field 的 value 不含有 array 中的任何一个

  1. query.notIn(fieldName, array)

field 的类型必须为数组, field 的 value 包含 array 中的每一个 ( * sdk version >= v1.1.1 )

  1. query.arrayContains(fieldName, array)

如果希望查找数组中只包含指定数组中所有的值的记录,可以使用比较查询

  1. query.compare(fieldName, '=', array)

请求示例

  1. /* color 是类型为字符串的字段,desc 是类型为数组的字段 */
  2. // 查询 color 是 green 或 red 或 yellow 的记录
  3. query.in('color', ['green', 'red', 'yellow'])
  4. // 查询 desc 中包含 green 或 red 或 yellow 的记录
  5. query.in('desc', ['green', 'red', 'yellow'])
  6. // 查询 color 不是 green、red 和 yellow 的记录
  7. query.notIn('color', ['green', 'red', 'yellow'])
  8. // 查询 desc 中不包含 green、red 和 yellow 的记录
  9. query.notIn('desc', ['green', 'red', 'yellow'])
  10. // 查询 desc 中包含 green、red 和 yellow 的记录
  11. query.arrayContains('desc', ['green', 'red', 'yellow'])
  12. // 查询 desc 中只包含 green、red 和 yellow 的记录
  13. query.compare('desc', '=', ['green', 'red', 'yellow'])

查询字段值为 null 或非 null 记录

  1. query.isNull('name')
  2. query.isNull(['name', 'price'])
  3. query.isNotNull('name')
  4. query.isNotNull(['name', 'price'])

查询字段值为空或非空记录

* sdk version >= v1.1.1

  1. query.exists('name')
  2. query.exists(['name', 'price'])
  3. query.notExists('name')
  4. query.notExists(['name', 'price'])

组合查询

  1. let query1 = new BaaS.Query()
  2. query1.isNull('name')
  3. let query2 = new BaaS.Query()
  4. query1.compare('price', '>', 10)
  5. ...
  6. // and 查询
  7. let andQuery = BaaS.Query.and(query1, query2, ...)
  8. // or 查询
  9. let orQuery = BaaS.Query.or(query1, query2, ...)

复杂组合查询

  1. let query1 = new BaaS.Query()
  2. query1.isNull('name')
  3. let query2 = new BaaS.Query()
  4. query1.compare('price', '>', 10)
  5. ...
  6. // and 查询
  7. let andQuery = BaaS.Query.and(query1, query2)
  8. // or 查询中包含 and 查询
  9. let query3 = new BaaS.Query()
  10. query3.compare('amount', '>', 3)
  11. let orQuery = BaaS.Query.or(andQuery, query3)