Я хочу отфильтровать результаты внутри DynamoDB по данным, которые не являются PartitionKey или Sort KEY (name = RowKey). Я могу ограничить результат с помощью PartitionKey. Поэтому я попытался сделать это в соответствии с документацией, чтобы сделать запрос (без ключа сортировки), но я получаю эту ошибку:
Unable to query. Error: {
"message": "Query condition missed key schema element: RowKey",
"code": "ValidationException",
"time": "2020-04-03T13:09:17.635Z",
"requestId": "ECD4VQBGFB0IUM6G9TUSPKA3LRVV4KQNSO5AEMVJF66Q9ASUAAJG",
"statusCode": 400,
"retryable": false,
"retryDelay": 43.542922337630074
}
На следующем рисунке показана конфигурация таблицы
И вот код, который я использовал:
async function FilterUsersAwsQUERY (_tenant_id,_filter) {
//debug('Enter in function');
var params = {
TableName : "zzzuser",
ProjectionExpression:"#pk, comapnyrole",
KeyConditionExpression: "#pk = :pk and #cr = :cr",
ExpressionAttributeNames:{
"#pk": "PartitionKey",
"#cr": "companyrole"
},
ExpressionAttributeValues: {
":pk": _tenant_id,
":cr": _filter
}
};
return new Promise (function(resolve, reject) {
//debug('Start query');
docClient.query(params, function(err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
reject(err);
} else {
//console.log("AWS ALL Query succeeded.");
resolve(data.Items);
//data.Items.forEach(function(item) {
// console.log(" -", item.year + ": " + item.title);
//});
}
});
});
};
PS. Я знаю, что есть опции .scan, но на это уходит более 10 секунд, потому что у меня есть 10.000 записей внутри, и каждый PartitionKey составляет около 400 записей.
Есть ли способ сделать это эффективно? Спасибо всем