java - Aerospike filter 布尔字段上的表达式不起作用

我在 Java 中编写了以下 Aerospike filter。 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 从 database 结果中可以看出,未设置为 true 的结果不会反映在结果集中。

我应该写我的 filter 是检查这种情况的不同方法吗?如果是这样,这种情况会是什么样子?

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

这是我通过 AQL 设置的 database 结果集

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

回答1

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

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))

相似文章

随机推荐

最新文章