Сделайте запрос к DynamoDB, выполнив операцию IN (begin_with (условие-выражение)) с ключом сортировки. - PullRequest
0 голосов
/ 20 февраля 2019

Я нахожусь в ситуации, чтобы запросить DynamoDB, где у меня есть hashKey (objectId) и у меня есть префикс для sortKey (versionId).

Я хотел бы добиться чего-то вроде ниже:

QuerySpec querySpec = new QuerySpec();
querySpec.withKeyConditionExpression("objectId = :v_objectId and (annotationIdVersion IN (:v_objectId, begins_with(versionId, :v_prefix)))")
            .withValueMap(new ValueMap().withString(":v_objectId", objectId).withString(":v_prefix", "v0_"));
table.query(querySpec);

В приведенном выше примере я пытаюсь проверить, равен ли мой versionId либо «objectId», либо «some_prefix».

Я обнаружил, что функция begin_with в DynamoDB помогает выполнить запрос на основепрефикс.

Но я не уверен, что оператор IN принимает функцию begin_with.Я ищу любое предложение по достижению вышеупомянутого варианта использования.

Любое предложение будет оценено.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Нет, вы не можете этого сделать.См. документацию для выражений условий .

Соответствующий синтаксис в верхней части страницы:

condition-expression ::=
    operand IN ( operand (',' operand (, ...) ))

Где операнд определяется как имя атрибута верхнего уровня или путь к документу, который ссылается на вложенный атрибут.Другими словами, поддерживаются только атрибуты, а не такие функции, как begins_with.

0 голосов
/ 20 февраля 2019

ключ сортировки не поддерживает «IN», только FilterExpression поддерживает

, поэтому вы можете запросить objectId =: v_objectId, а затем отфильтровать

{
        "TableName": "tpl_name",
        "KeyConditionExpression": " objectId = :objectId_value ",
        "FilterExpression": "( annotationIdVersion IN (:v1,:v2,:v3 ) )",
        "ExpressionAttributeValues": {
            ":objectId_value": {
                "S": "myobjid"
            },
            ":v1": {
                "S": "a"
            },
            ":v2": {
                "S": "b"
            },
            ":v3": {
                "S": "c"
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...