字段过滤与扩展

字段过滤

使用 Query.keys(…) 来控制请求返回的字段

Table.fetchRecord 方法中使用

  1. Table table = new Table("product");
  2. String id = "990ads2849nafakl3ur";
  3. try {
  4. Query query = new Query();
  5. // 规定返回特定字段
  6. query.keys("created_at", "created_by");
  7. // 规定不返回特定字段
  8. query.keys("-created_at", "-created_by");
  9. Record record = table.fetchRecord(id, query);
  10. // 或者使用便利方法
  11. Record record = table.fetchRecord(id, null, Arrays.asList("created_at", "created_by"));
  12. // 操作成功
  13. } catch (Exception e) {
  14. // 操作失败
  15. }

Table.query 方法中使用

  1. Table table = new Table("product");
  2. try {
  3. Query query = new Query().offset(0).limit(15);
  4. // 规定返回特定字段
  5. query.keys(Record.CREATED_AT, Record.CREATED_BY);
  6. // 规定不返回特定字段
  7. query.keys("-created_at", "-created_by");
  8. PagedList<Record> records = table.query(query);
  9. // 操作成功
  10. } catch (Exception e) {
  11. // 操作失败
  12. }

注:

通过数组控制请求返回字段时,若数组内元素同时存在“规定返回”和“规定不返回”的字段,如:['-created_at', 'created_by']。后端服务会忽略掉此次操作,直接返回所有字段。

字段扩展

开发者可以通过 expand pointer 来查询该字段的更多信息,返回结果中的 pointer 字段会被替换为这个字段对应的完整的数据行对象。

created_by 字段是一个特殊的 pointer,开发者无需配置,默认指向了 _userpofile 表使用 expand 方法会增加一次数据表查询,api call 计费 +1

expand 返回结果示例

注:pointer_value 为指向其他表的 pointer 类型字段

不使用 expand

  1. {
  2. "created_at": 1516118400,
  3. "created_by": 1234,
  4. "id": "5a2fa9b008443e59e0e67829",
  5. "name": "小米无线耳机",
  6. "price": 199,
  7. "pointer_value": "5a2fa9xxxxxxxxxxxxxx"
  8. }

使用 expand

  1. {
  2. "created_at": 1516118400,
  3. "created_by": {
  4. "avatar": "https://media.ifanrusercontent.com/tavatar/fb/cd/xxxx.jpg",
  5. "id": 62536607,
  6. "nickname": "Larry。"
  7. },
  8. "pointer_value": {
  9. "created_at": 1516118400,
  10. "name": "123",
  11. "id": "5a2fa9xxxxxxxxxxxxxx"
  12. },
  13. "id": "5a2fa9b008443e59e0e67829",
  14. "name": "小米无线耳机",
  15. "price": 199
  16. }

使用方法

在 fetchRecord 方法中使用

  1. Table table = new Table("product");
  2. String id = "990ads2849nafakl3ur";
  3. try {
  4. Query query = new Query();
  5. // 设置需要展开的字段
  6. query.expand("created_by", "pointer_value");
  7. Record record = table.fetchRecord(id, query);
  8. // 或者使用便利方法
  9. Record record = table.fetchRecord(id, Arrays.asList("created_by", "pointer_value"), null);
  10. // 操作成功
  11. } catch (Exception e) {
  12. // 操作失败
  13. }

在 query 方法中使用

  1. Table table = new Table("product");
  2. try {
  3. Query query = new Query().offset(0).limit(15);
  4. // 设置需要展开的字段
  5. query.expand("created_by", "pointer_value");
  6. PagedList<Record> records = table.query(query);
  7. // 操作成功
  8. } catch (Exception e) {
  9. // 操作失败
  10. }