Таблица запросов AppSync Resolver / вторичный индекс без использования первичного ключа

Из официальной документации AWS кажется, что для запроса элементов в Dynamodb необходимо предоставить выражение ключа равенства для первичного ключа. Однако AppSync doc этого явно не сказано. Мне интересно, возможно ли в преобразователе запросить Dynamodb без предоставления выражения ключа равенства для первичного ключа индекса или таблицы? Например, могу ли я сделать следующее:

primaryKey! = anInput

или просто полностью опустить выражение равенства и вместо этого использовать выражения для других атрибутов?


person Sarah Guo    schedule 14.11.2018    source источник


Ответы (2)


В документе AppSync говорится: «Выражение запроса. Это поле должно быть указано». В случае запроса DDB в документе DDB говорится: Операция запроса находит элементы на основе значений первичного ключа. Вы можете запросить любую таблицу или вторичный индекс, имеющий составной первичный ключ (ключ раздела и ключ сортировки).

person Vasileios Lekakis    schedule 14.11.2018

Можно получить записи из DynamoDB без предоставления выражения ключевого условия для первичного ключа (или индекса), но вы должны использовать операцию Scan, которая обращается к каждому элементу в таблице (или индексе).

Пример из AWS Документация по сканированию AppSync:

{
  "version" : "2017-02-28",
  "operation" : "Scan",
  "filter" : {
    "expression" : "begins_with(title, :title)",
    "expressionValues" : {
      ":title" : { "S" : "${context.arguments.title}" }
    },
  }
}

DynamoDB Scan API:

Операция сканирования возвращает один или несколько элементов и атрибутов элементов, обращаясь к каждому элементу в таблице или вторичном индексе. Чтобы DynamoDB возвращал меньше элементов, можно предоставить операцию FilterExpression.

Что касается вашего конкретного вопроса о поиске элементов, которые не соответствуют определенному первичному ключу:

primaryKey! = anInput

Если ваш primaryKey представляет собой комбинацию ключа раздела + ключа сортировки, вам следует рассмотреть возможность использования операторов NOT и логических AND со скобками:

{
  "version": "2017-02-28",
  "operation": "Scan",
  "filter": {
    "expression": "NOT (#PK = :PK AND #SK = :SK)",
    "expressionNames": {"#PK": "PK", "#SK": "SK"},
    "expressionValues": {
      ":PK":{"S":"some-partition-key"},
      ":SK":{"S":"some-sort-key"}
    },
  },
  "consistentRead": true,
  "limit": 10
}
person ggriffin    schedule 21.10.2019