Применяется ли выражение фильтра в запросе DynamoDB. NET после применения условия «ограничение страницы»? - PullRequest
0 голосов
/ 02 марта 2020

Я пишу запрос Dynamo Db. NET с обоими «Пределом» и «Выражением фильтра», как показано ниже:

var search = testTable.Query(new QueryOperationConfig
                {
                    Filter = new QueryFilter("Name", QueryOperator.BeginsWith,  "B"),
                    IndexName = "IsActive-gsi",
                    Limit = 5,
                    PaginationToken = paginationToken,
                });

Я ожидаю, что сначала должно быть оценено выражение фильтра, а затем предельное условие применяется к отфильтрованному результату. Но запрос, кажется, работает по-другому. То есть сначала применяется условие Limit, а затем к ограниченному результату применяется выражение фильтра. Из-за этого я не получаю ожидаемого результата.

Например, скажем, у меня есть 10 строк в таблице (только один столбец типа строки). Скажем, первые 5 строк начинаются с буквы «А», а затем 6-й ряд начинается с буквы «В». Я добавил Limit как 5 и фильтровал выражение как "BeginsWith ('B')", как показано выше в запросе. Я ожидаю получить хотя бы один результат (6-я строка), но запрос возвращает ноль результатов.

Мой вопрос: мой запрос неправильный или Dynamo DB работает таким образом? Если это работает таким образом, то как обойти эту проблему, то есть сначала применить выражение фильтра ко всем строкам, а затем применить условие ограничения, как в одном обращении к базе данных?

1 Ответ

1 голос
/ 02 марта 2020

FilterExpression фактически не изменяет сам запрос (т. Е. Все элементы, соответствующие вашему запросу, возвращаются из DynamoDB), но только ограничивает результаты после . См. Документацию FilterExpression :

Выражение фильтра применяется после завершения запроса, но до возвращения результатов.

Таким образом, это означает, что что ваше наблюдаемое поведение является ожидаемым поведением.

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

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