TableObject myTableObject = new TableObject(tableName)
参数说明
tableName 和 tableId 二选一,不能同时存在
参数
类型
必填
说明
tableId
String
是
数据表的 ID
tableName
String
是
数据表名
2.创建 Where 对象,在该对象上添加查询条件
Where where = Where.contains('color', 'red');
查看下面的文档,了解目前支持的查询条件
3.设置查询条件并执行查找操作
Query query = new Query();
query.where(where);
4.支持查询条件并执行查找操作
myTableObject.find(query: query);
info 注意:知晓云的 api URL 长度限定为 16386,超出则返回 502,请在构造查询条件时注意长度控制,如 inList 操作符后边的数组长度、match 操作符后边的字符串长度等。
返回结果
示例
请求示例
// 实例化查询对象
Query query = new Query();
// 设置查询条件
Where where = Where.compare('num', '>=', 100);
query.where(where);
// 应用查询对象
TableObject tableObject = new TableObject(tableName);
try {
TableRecordList data = await tableObject.find(query: query);
} catch (e) {
print(e.toString());
}
// 不应用查询条件
try {
TableRecordList data = await tableObject.find();
} catch (e) {
print(e.toString());
}
返回结果
常见错误:
错误码 err.code
可能的原因
400
1. 指定/过滤输出字段的字段名有误、2. GEO 查询参数有误、3. 查询语法错误
404
数据表不存在
比较查询
Where where = Where.compare(key, operator, value);
operator 包含 =, !=, <, <=, >, >=
Where where = Where.compare('amount', '>', 1);
字符串查询
查询返回满足包含相应字符串的记录,如下示例:
// 例:{"name": "apple"}
Where where = Where.contains('name', 'apple'); // 查询 name 字段包含 'apple' 的记录,能正确匹配
Where where = Where.contains('name', 'app'); // 查询 name 字段包含 'app' 的记录,能正确匹配
Where where = Where.contains('name', 'apple123'); // 查询 name 字段包含 'apple123' 的记录,不能正确匹配
Where.matches('name', regExp);
构建一个 regExp 可通过以下方法,i 表示对大小写不敏感:
调用 RegExp 对象的构造函数
RegExp regExp = new RegExp(r'/^foo/i');
正则匹配示例
/* 以查找名字为例,name 字段必须为 string 类型 */
RegExp regExp = new RegExp(r'/^foo/i');
// 查找 以 foo 开头的名字,并且对大小写不敏感
Where where = Where.matches('name', regExp);
query.where(where);
/* 以查找手机号码为例,phoneNumber 字段必须为 string 类型 */
// 查找 以 188 开头的手机号码
RegExp regExp = new RegExp(r'/^188/');
// 查找 以 708 结尾的手机号码
RegExp regExp = new RegExp(r'/708$/');
// 查找 以 188 开头的手机号码,以 708 结尾的手机号码
RegExp regExp = new RegExp(r'/^188\d+708$/');
Where where = Where.matches('phoneNumber', regExp);
数组查询
field 的类型不限制,field 的 value 含有 array 中的一个或多个
Where where = Where.inList(fieldName, array);
field 的类型不限制,field 的 value 不含有 array 中的任何一个
Where where = Where.notInList(fieldName, array);
field 的类型必须为 数组, field 的 value 包含 array 中的 每一个
Where where = Where.arrayContains(fieldName, array);
如果希望查找数组中只包含指定数组中所有的值的记录,可以使用比较查询
Where where = Where.compare(fieldName, '=', array);
// inList 查询
Where where = Where.inList('customer', [Customer.getWithoutData('5bad87ab0769797b4fb27a1b'), Customer.getWithoutData('5bad87ab0769797b4fb27a1f'), Customer.getWithoutData('5bad87ab0769797b4fb27a11')]);
// 查询 user 字段是否存在
Where where = Where.exist('customer')
组合查询
Where where1 = Where.isNull('name');
Where where2 = Where.compare('price', '>', 2);
// and 查询
Where andWhere = Where.and([where1, where2]);
// or 查询
Where orWhere = Where.or([where1, where2]);
复杂组合查询
Where where1 = Where.isNull('name');
Where where2 = Where.compare('price', '>', 2);
//...
// and 查询
Where andWhere = Where.and([where1, where2]);
// or 查询中包含 and 查询
Where where3 = Where.compare('amount', '>', 3);
Where orWhere = Where.or([andWhere, where3]);
获取符合筛选条件的数据总数
BaaS.TableObject#count()
TableObject tableObject = new TableObject(tableName);
Query query = new Query();
// 设置查询条件
// ...
try {
int count = await tableObject.count(query: query);
print(count);
} catch (e) {
print(e.toString());
}