条件过滤和更新
条件更新包含条件过滤和更新两部分内容,后者目前是指对数组的更新。
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");
上述
condition
、operation
是类 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. 注意事项
- 参数
condition
和operation
文本最大长度是1023。