AWS GET api-запрос к DynamoDB с использованием вторичного индекса в шаблоне отображения - PullRequest
0 голосов
/ 05 февраля 2020

Таблица данных таблицы DyanmoDB: Product_Level Имеет 3 столбца: PRODUCT (ключ раздела), COLOR (ключ сортировки), Stock.

Требуется доступ к данным только с COLOR. Для этого мы создаем вторичный индекс для COLOR. Я хочу понять, как мы вносим изменения в API.

- Это должно работать, если я использую либо PRODUCT, либо COLOR

В настоящее время это код в шаблоне сопоставления запросов:

"KeyConditionExpression": "PRODUCT = :a#if($input.params('color') != "") AND COLOR = :b#{end}",
"ExpressionAttributeValues": {
    ":a": {"S": "$input.params('product')"}#if($input.params('color') != ""),
    ":b": {"S": "$input.params('color')"}#{end}
},

Ответы [ 3 ]

0 голосов
/ 12 февраля 2020

Если вы хотите делать запрос с использованием PRODUCT и фильтровать по COLOR, вам не нужно создавать вторичный индекс. Этот запрос должен работать:

{
    TableName: "Product_Level",
    KeyConditionExpression: "PRODUCT = :PRODUCT",
    FilterExpression: "contains (COLOR, :COLOR)",
    ExpressionAttributeValues: {
        ":PRODUCT": PRODUCT,
        ":COLOR" : COLOR
    }
}
0 голосов
/ 12 февраля 2020

Поскольку вы знаете, что у вас есть «продукт» и / или «цвет» (т. Е. Они являются отдельными полями), вы можете хранить данные с разделом продукта, своего рода цветом и GSI с разделом цвета. Вам нужно будет выполнить разные запросы в зависимости от того, какие параметры вы получите.

С данными ниже вы можете выполнить следующие запросы, чтобы получить нужные данные.

  1. Получить все «ProductA», просто запросив, где «Partition =« ProductA »»
  2. Получить все «синие» записи, запросив GSI, где «GSI_Partition = 'Blue'"
  3. Get " Красный "" ProductA "запись с использованием GetItem, указывающего ключ продукта и цвета.
Partition     Sort     GSI_Partition      Stock
ProductA      Red      Red                ...
ProductA      Blue     Blue               ...
ProductB      Blue     Blue               ...

Если вам действительно нужно указать либо color или товар в одном запросе

0 голосов
/ 06 февраля 2020

Необходимо указать имя вторичного индекса в запросе.

Предположим, что вторичный индекс был создан для "COLOR", а имя индекса - "COLOR-Index".

Запрос должен быть:

{
    TableName: "Product_Level",
    IndexName: "COLOR-Index",
    KeyConditionExpression: "COLOR = :COLOR",
    ExpressionAttributeValues: {
        ":COLOR": COLOR
    }
};
...