DynamoDB: фильтровать и сортировать одно и то же поле? - PullRequest
2 голосов
/ 03 августа 2020

У меня есть таблица с локальным индексом, как показано ниже.

как сделать запрос типа startDate

насколько я знаю , чтобы отсортировать результат, мне нужно использовать InvoiceDateLocalIndex. Но если бы я использовал, то получил бы ошибку «Выражение фильтра может содержать только атрибуты, отличные от первичного ключа: Атрибут первичного ключа: InvoiceDate»

"IndexName": "InvoiceDateLocalIndex",
 "KeySchema": [
  {
     "AttributeName": "FinanceYear",
     "KeyType": "HASH"
  },
  {
     "AttributeName": "InvoiceDate",
     "KeyType": "RANGE"
  }
]

1 Ответ

0 голосов
/ 03 августа 2020

Действительно, вы не можете использовать FilterExpression над ключом диапазона (InvoiceDate). Но причина этого не в том, что это невозможно сделать - причина, по которой это запрещено, состоит в том, чтобы предотвратить дорогостоящую ошибку:

Чтобы запросить только диапазон вашего ключа диапазона, вы должны использовать KeyConditionExpression, а не FilterExpression.

Использование KeyConditionExpression быстрее и дешевле, потому что DynamoDB извлекает только совпадающие элементы, тогда как FilterExpression будет читать (и взимать с вас) все раздел. Вот почему «ключи диапазона» называются «ключами диапазона» - они позволяют вам эффективно запрашивать диапазон этого ключа. Их также называют «ключом сортировки», потому что они не просто определяют диапазоны - они фактически сортируются.

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