• 查询
    • SDK 1.1.0 及以上版本
      • 操作步骤
      • 示例
      • 比较查询
      • 多个查询条件
      • 字符串查询
      • 正则匹配示例
      • 数组查询
      • null 或非 null 查询
      • 空或非空查询
      • 组合查询
      • 复杂组合查询
    • SDK 1.1.0 以下版本
      • 普通查询
      • 条件查询

    查询

    {% tabs first=”SDK 1.1.0 及以上版本”, second=”SDK 1.1.0 以下版本” %}

    {% content “first” %}

    SDK 1.1.0 及以上版本

    操作步骤

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

    let MyTableObject = new wx.BaaS.TableObject(tableID)

    参数说明

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

    info
    SDK 1.2.0 版本已支持通过数据表名实例化 TableObject,如操作数据表名为 ‘product’ 的数据表,可进行如下实例化:new wx.BaaS.TableObject(‘product’)

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

    let query = new wx.BaaS.Query()

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

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

    MyTableObject.setQuery(query).find()

    示例

    请求示例

    1. // 实例化查询对象
    2. let query = new wx.BaaS.Query()
    3. // 设置查询条件(比较、字符串包含、组合等)
    4. ...
    5. // 应用查询对象
    6. let Product = new wx.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 查询

    查询字段值为 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 wx.BaaS.Query()
    2. query1.isNull('name')
    3. let query2 = new wx.BaaS.Query()
    4. query2.compare('price', '>', 10)
    5. ...
    6. // and 查询
    7. let andQuery = wx.BaaS.Query.and(query1, query2, ...)
    8. // or 查询
    9. let orQuery = wx.BaaS.Query.or(query1, query2, ...)

    复杂组合查询

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

    {% content “second” %}

    SDK 1.1.0 以下版本

    info
    该写法在 sdk v2.0 前仍然有效

    wx.BaaS.getRecordList(OBJECT)

    普通查询

    OBJECT 参数说明

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

    请求示例

    1. // 获取 tableID 为 10 的数据表中的第一页(默认 20 条)的数据记录
    2. let tableID = 10
    3. let objects = { tableID }
    4. wx.BaaS.getRecordList(objects).then(res => {
    5. // success
    6. }, err => {
    7. // err
    8. })

    返回参数

    • meta: 元信息
    • objects: 数据列表

    列表项属性说明

    参数名 类型 说明
    id String 数据表 ID
    created_at Integer 创建时间
    is_admin Boolean 自定义字段
    name String 自定义字段
    price Integer 自定义字段
    tags Array 自定义字段

    返回示例

    1. {
    2. "meta": {
    3. "limit": 20,
    4. "next": null,
    5. "offset": 0,
    6. "previous": null,
    7. "total_count": 1
    8. },
    9. "objects": [
    10. {
    11. "created_at": 1487053095,
    12. "id": "7",
    13. "is_admin": false,
    14. "name": "JlpvHdheLh",
    15. "price": 89,
    16. "tags": ["xGHt", "hHqz"]
    17. }
    18. ]
    19. }

    条件查询

    BaaS 提供的查询数据接口提供三种过滤查询方式:

    • 精确查询
    • 模糊查询
    • 多项匹配

    提供小于,小于等于,大于,大于等于,范围操作,而且可以组合使用。后缀的使用规则如: price__rangename__containsrecordID__lte

    参数后缀 对应数据表类型 说明
    lt Integer/String 小于
    lte Integer/Sring 小于等于
    gt Integer/String 大于
    gte Integer/String 大于等于
    range Integer/Float 范围
    contains String 包含

    示例 1:查询创建者 ID 为 1,name知晓云 的记录(精确查询)

    1. let objects = {
    2. tableID: 10,
    3. created_by: 1,
    4. name: '知晓云'
    5. }
    6. wx.BaaS.getRecordList(objects).then(res => {
    7. // success
    8. }, err => {
    9. // err
    10. })

    示例 2:查询 name 中包含 知晓云 字符串的记录(模糊查询)

    1. let objects = {
    2. tableID: 10,
    3. name__contains: '知晓云',
    4. }
    5. wx.BaaS.getRecordList(objects).then(res => {
    6. // success
    7. }, err => {
    8. // err
    9. })

    示例 3:查询创建者 ID 为在范围 [1, 3] 的记录(多项匹配)

    1. let objects = {
    2. tableID: 10,
    3. created_by__range: '1,3',
    4. }
    5. wx.BaaS.getRecordList(objects).then(res => {
    6. // success
    7. }, err => {
    8. // err
    9. })

    示例 4:查询创建者 recordID 大于等于 ‘5919eb015f281f2b321720be’ 的记录

    1. let objects = {
    2. tableID: 10,
    3. recordID__gte: '5919eb015f281f2b321720be',
    4. }
    5. wx.BaaS.getRecordList(objects).then(res => {
    6. // success
    7. }, err => {
    8. // err
    9. })

    示例 5:查询创建者 recordID 大于等于 ‘5919eb015f281f2b321720be’,且 price 小于 1000 的记录

    1. let objects = {
    2. tableID: 10,
    3. recordID__gte: '5919eb015f281f2b321720be',
    4. price__lt: 1000
    5. }
    6. wx.BaaS.getRecordList(objects).then(res => {
    7. // success
    8. }, err => {
    9. // err
    10. })

    info
    加入查询的字段必须是 FlexSchema 定义过的字段。其中,idcreated_by(创建者)字段默认支持; 模糊查询的字段不能是 Array 类型; 多项匹配的字段只能是 Array 类型

    {% endtabs %}