Aerospike Client:列表整数场景下PredExp的Expression替代方案
Aerospike PredExp 转 Expression 实现方案
原PredExp逻辑解析
原代码实现的是:遍历名为fieldName的列表类型Bin,检查列表中是否存在至少一个整数元素等于指定的fieldValue,只要有一个匹配就返回true。
对应的Expression替代代码
// 构建匹配表达式:检查列表元素是否等于目标值 Exp matchExp = Exp.eq(Exp.listBin(fieldName), Exp.val((Long) fieldValue)); // 使用listAny实现"遍历匹配任一元素"的逻辑 Exp expression = Exp.listAny(matchExp);
也可以写成更简洁的链式调用形式:
Exp expression = Exp.listAny(Exp.eq(Exp.listBin(fieldName), Exp.val((Long) fieldValue)));
关键说明
Exp.listAny()完全对应原PredExp中PredExp.listIterateOr()的逻辑:遍历列表所有元素,只要有一个元素满足内部表达式,就返回true- Expression API无需单独定义变量(原代码中的
v),会自动处理列表元素的遍历上下文 - 之前用
Exp.intOr失败是因为它用于多个整数表达式的逻辑或,并非列表遍历场景,和原逻辑不匹配
内容的提问来源于stack exchange,提问作者Avanish Ghosh
相关产品推荐
相关产品推荐

