#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
Вероятно, было бы хорошей идеей закодировать / зашифровать / запутать контекст поиска в ответе клиенту.