条件过滤和更新

条件更新包含条件过滤更新两部分内容,后者目前是指对数组的更新。

1. 使用说明

对于主要的增删改查接口,可以通过 condition 入参设置过滤条件,仅当条件满足时,才会返回查询的数据或才执行更新操作,否则返回错误码 COMMON_ERR_CONDITION_NOT_MATCHED

对于修改请求,可以通过 operation 入参设置更新操作,目前是指对数组的插入(PUSH)、删除(POP)、修改(SET)操作。

如:

int TcaplusCoroutinePbApi::FieldSet(
    const std::set<std::string> &dottedpaths, 
    google::protobuf::Message *msg,
    const std::string &operation,
    const std::string &condition);

示例

user u;
// 设置主键
u.set_id(1);
u.set_name("a");

// 设置递增的步长
u.set_rank(1);
// 当rank达到上限100之后,不再对rank递增,否则 +1
std::set<std::string> dottedpaths;
dottedpaths.insert("rank");
ret = api.FieldInc(dottedpaths, &u, "", "rank < 100");

上述 conditionoperation 是类 SQL 的文本,见详细语法说明

2. 哪些接口支持条件更新?

版本大于等于 3.55.0 的 SDK 中,支持的命令有

  • Get
  • Del
  • Set
  • Update
  • FieldGet
  • FieldInc
  • FieldSet
  • IndexGetRequest
  • Query,数组的GET,即查询返回部分下标范围的数组元素,更推荐使用FieldGet,也可以查询返回部分下标范围的数组元素
  • UpdateItem,数组的PUSH、SET、POP 操作
  • Traverse
  • ListGet
  • ListGetAll
  • ListDel
  • ListBatchDel
  • ListReplace
  • ListTraverse
  • ListQuery
  • ListUpdateItem

有部分命令,以及 Batch 类操作,需要版本大于等于 3.64.0 才能支持,包括

  • IndexDeleteRequest
  • BatchGet
  • BatchUpdate
  • BatchDelete
  • BatchSet
  • BatchFieldGetRequest

在条件过滤、更新的支持下,使用 FieldSet、FieldGet,能够实现类 Schema-free 的用法

更多关于条件过滤和更新的能力支持,请联系Tcaplus。

3. 注意事项

  • 参数 conditionoperation 文本最大长度是1023。

results matching ""

    No results matching ""