Как проверить, отсутствует ли атрибут в выражении фильтра DynamoDB - PullRequest
0 голосов
/ 14 апреля 2020

Я ввожу новое поле InActive в мою таблицу динамо-базы данных, теперь я хочу получить записи, которые были активны ранее (при условии, что все предыдущие записи были активными) вместе с новыми активными записями.

Каким должно быть мое динамо выражение DB Query?

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

Это правильно?

1 Ответ

1 голос
/ 14 апреля 2020

см. - https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html

 ... ddbRecord.IN_ACTIVE + " = :in_active OR attribute_not_exists(" + ddbRecord.IN_ACTIVE + ")" ...

DynamoDb не выполняет неявное преобразование в ноль. Чтобы вышеуказанный запрос работал, данные в таблице должны были бы содержать:

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

Однако я подозреваю, что старые записи в таблице просто не содержат атрибут "is_active", а не присутствуют и имеют значение NULL. следовательно, допустимым условием является attribute_not_exists (is_active)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...