布尔字段上的 Aerospike 过滤器表达式不起作用

Aerospike filter expression on boolean fields not working

我在 Java 中编写了以下 Aerospike 过滤器。 Field1Field2 都是布尔值。出于某种原因,“filterByField.ValidBoth”条件不会产生 true,尽管记录符合条件。

因为它是一个布尔值,我使用 1 表示真,0 表示假。

我是不是漏掉了什么?

public Exp getFilterByFieldFilter(FilterByField filterByField) {
    if (filterByField == null || "".equals(filterByField)) {
        return Exp.val(true);
    }
    if (filterByField == filterByField.All) {
        return Exp.val(true);
    } else if (filterByField == filterByField.ValidBoth) {
        return Exp.and(Exp.eq(Exp.intBin("Field1"), Exp.val(0)),
                Exp.eq(Exp.intBin("Field2"), Exp.val(0)));
    }
}

从我通过 AQL 从数据库结果中看到的,那些未设置为 true 的内容不会反映在结果集中。

我是否应该将我的过滤器写成另一种检查这种情况的方法?如果是这样,那情况会是什么样子?

我尝试检查 Exp.val(NULL) 但出现错误。

这是我通过 AQL 设置的数据库结果

 [
        {
          "PK": "1",
          "Name": "ABC",
          "Field1": 1,
          "Field2": 1
        },
        {
          "PK": "2",
          "Name": "EFG",
          "Field1": 1
        },
        {
          "PK": "3",
          "Name": "XYZ",
        }
        
    ]

如果 bin 名称 Field1 和 Field2 包含布尔值,那么您的表达式应该以这种方式构造(无论所需的逻辑是什么):

Exp.eq(Exp.boolBin("Field1"), Exp.val(false))

我测试了下面的构造,似乎对我有用:

WritePolicy wPolicy = new WritePolicy();

Bin b1 = new Bin("Field1", Value.get(0));
Bin b2 = new Bin("Field2", Value.get(0));
Bin b3 = new Bin("Data", Value.get("data"));

wPolicy.recordExistsAction = RecordExistsAction.REPLACE;

client.put(wPolicy, key, b1, b2, b3);

//client.put(wPolicy, key, b1, b3);

Exp condFilter = Exp.and( 
Exp.eq(Exp.intBin("Field1"),Exp.val(0) ),
Exp.eq(Exp.intBin("Field2"),Exp.val(0) )
);

Policy policy = new Policy();

policy.filterExp = Exp.build(condFilter);
Record record = client.get(policy, key);
System.out.println("Read back the record.");

System.out.println("Record values are:");
System.out.println(record);

//Get record without filter condition
record = client.get(null, key);
System.out.println(record);

有效条件:

Read back the record.
Record values are:
(gen:18),(exp:0),(bins:(Field1:0),(Field2:0),(Data:data))
(gen:18),(exp:0),(bins:(Field1:0),(Field2:0),(Data:data))

无效条件(无 Field2 bin):

Read back the record.
Record values are:
null
(gen:19),(exp:0),(bins:(Field1:0),(Data:data))