Как получить данные, используя критерии поиска с ограничением, используя DynamoDB в NodeJS?

#node.js #amazon-dynamodb

#node.js #amazon-dynamodb

Вопрос:

Я хочу применить таблицу начальной загрузки для листинга с сортировкой и фильтрацией по страницам, разбивка на страницы выполнена, но когда я перехожу к фильтрации в то время, данные, найденные только из ограниченных данных, ограничение которых определяется в LIMIT, итак, как применить запрос сортировки и фильтрации по страницам в Dynamodb точно так же, как MySQL (limit, offset).

текущий запрос :-

 var params = {
                TableName: tableName,
                KeyConditionExpression: (req.body.search.length == 0) ? null : " #emailid = :search_Query",
                FilterExpression  : (req.body.search.length == 0) ? null :  " contains  (#name , :search_Query) OR  contains (#lastName , :search_Query) ",
                ExpressionAttributeNames: (req.body.search.length == 0) ? null : {
                    "#name": "name",
                    "#lastName": "lastName",
                },
                ExpressionAttributeValues: (req.body.search.length == 0) ? null :  {
                    ":search_Query" : req.body.search
                },
                Limit :  req.body.limit ,
                ExclusiveStartKey: (req.body.offset == 0) ? null : {emailid : req.body.emailid } ,


            };
            var lastData=[];
            docClient.scan(params, function scanUntilDone(err, data) {
            });
  

текущее поведение
выборка данных только из определенного предела, если пройти ограничение 5 и выполнить поиск данных только из пяти данных, но мне нужны пять данных из всех данных, как в базе данных MySQL (limit), тогда как я могу применить запрос

Заранее благодарю

Ответ №1:

Вам пришлось бы передать контекст поиска клиенту в вашем ответе. LastEvaluatedKey Для «текущей» страницы, а также смещение для количества результатов на странице, которые вы включили в ответ. Клиент должен был бы включить контекст поиска в следующий запрос. Используйте более высокий предел для фактических запросов DynamoDB, чтобы избежать разбиения на страницы запросов на стороне сервера.

Пример (где клиенту нужны аккуратные страницы из 5 или менее результатов):

 API Request 1: Limit=5

DDB Request 1: ExclusiveStartKey=null, Limit=100
DDB Response 1: Results=3, LastEvaluatedStartKey=A
DDB Request 2: ExclusiveStartKey=A, Limit=100
DDB Response 2: Results=77, LastEvaluatedStartKey=B

API Response 1: Results=[<3 results from page 1   2 from page 2>], SearchKey={A: 2} // the offset

API Request 2: Limit=5, SearchKey={A: 2}
DDB Request 3: ExclusiveStartKey=A, Limit=100
DDB Response 3: Results=77, LastEvaluatedStartKey=B

API Response 1: Results=[<5 results from page 2, starting at offset 2>], SearchKey={A: 7} // the new offset, same page still
  

Вероятно, было бы хорошей идеей закодировать / зашифровать / запутать контекст поиска в ответе клиенту.