Java 如何检查dynamoDB筛选器表达式中是否不存在属性

Java 如何检查dynamoDB筛选器表达式中是否不存在属性,java,amazon-web-services,amazon-dynamodb,Java,Amazon Web Services,Amazon Dynamodb,我在我的dynamo DB表中引入了一个新的非活动字段,现在我想获取以前活动的记录(假设所有以前的记录都是活动的)以及新的活动记录 我的dynamo DB查询表达式应该是什么 final HashMap<String, AttributeValue> activeExpressionAttrValue = new HashMap<>(); activeExpressionAttrValue.put(":in_active_false", new Attribute

我在我的dynamo DB表中引入了一个新的非活动字段,现在我想获取以前活动的记录(假设所有以前的记录都是活动的)以及新的活动记录

我的dynamo DB查询表达式应该是什么

final HashMap<String, AttributeValue> activeExpressionAttrValue = new HashMap<>();
    activeExpressionAttrValue.put(":in_active_false", new AttributeValue().withBOOL(false));
    activeExpressionAttrValue.put(":in_active_null", new AttributeValue().withNULL(true));


 dynamoDBQueryExpression.withHashKeyValues(ddbRecord.builder().primarykey(p).build())
            .withFilterExpression(ddbRecord.IN_ACTIVE + " = :in_active_false OR" +
                    ddbRecord.IN_ACTIVE + " = :in_active_null")
            .withExpressionAttributeValues(activeExpressionAttrValue);
final HashMap activeExpressionAttrValue=new HashMap();
activeExpressionAttrValue.put(“:in_active_false”,new AttributeValue(),with bool(false));
activeExpressionAttrValue.put(“:in_active_null”,new AttributeValue(),with null(true));
dynamoDBQueryExpression.withHashKeyValues(ddbRecord.builder().primarykey(p.build())
.withFilterExpression(ddbRecord.IN_ACTIVE+“=:IN_ACTIVE_false或”+
ddbRecord.IN_ACTIVE+“=:IN_ACTIVE_null”)
.带有ExpressionAttribute值(ActiveExpressionAttribute值);
这是否正确?

请参见-

DynamoDb不执行到null的隐式转换。要使上述查询正常工作,表中的数据必须包含:

 {
     "some_attribute": {
          "S": "some attribute string value"
     },
     "is_active": {
          "NULL":true
     }
 }

然而,我怀疑,表中的旧记录只是不包含“is\u active”属性,而不是将其存在并设置为NULL,因此有效条件是属性不存在(is\u active)

ddbRecord.in\u active+“=:in\u active\u NULL”和属性不存在(“+ddbRecord.in\u active+”)有什么区别“?是的,我运行了查询,在这种情况下它没有给出任何输出。表示已经活动的记录也不会出现。在您的示例中,您添加了将失败的:In\u active\u null的值,如我前面所述,以及:In\u active\u false的值,而您的查询正在查找错误描述的:In\u active(无\u false)。我只在\u active\u false中使用了。那么,ddbRecord.builder().primarykey(p.build()返回什么?您应该只设置HashKey。若它为RangeKey添加了一些零散值,那个么您的查询将被限制为最多1条记录。
 {
     "some_attribute": {
          "S": "some attribute string value"
     },
     "is_active": {
          "NULL":true
     }
 }