Я использую AWS DynamoDB Data Mapper в качестве высокоуровневого API для управления моей базой данных. Я пытаюсь запросить глобальный вторичный индекс, но не могу выйти за пределы этого исключения.
GSI основывается на запланированной дате окончания публикации в форме YYYY-MM-DD
.
Когда я пытаюсь построить запрос следующим образом:
function getQueryPaginator( dataMapper: DataMapper, startKey: { [ key: string ]: any } ): QueryPaginator<Load> {
const today: Date = new Date();
const partitionKey: string = `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()}`;
const queryOptions: QueryOptions = {
indexName: 'PostingExpiryIndex',
limit: 25
};
return dataMapper.query(
Load,
{
partitionKey: partitionKey
},
queryOptions
).pages();
}
И используйте это:
const paginator: QueryPaginator<Load> = getQueryPaginator( dataMapper, lastEvaluatedKey );
for await ( const page of paginator ) {
try {
const loadsBatch: Array<Load> = [];
page.forEach( ( load: LoadInterface ) => {
// do some logic...
loadsBatch.push( Object.assign( new Load(), load ) );
} );
dataMapper.batchPut( loadsBatch );
} catch ( e ) {
log.error( `Error occurred while processing expired loads: ${e}` );
await handleError( e );
}
}
Я получаю следующее исключение:
ValidationException: условие запроса пропущено ключевой элемент схемы
в Request.extractError (/Users/myworkspace/node_modules/aws-sdk/lib/protocol/json.js:48:27)
Однако я могу запрашивать и получать значения, используя эквивалентный API-интерфейс клиента документов AWS:
var params = {
TableName: 'loads',
IndexName: 'PostingExpiryIndex', // optional (if querying an index)
KeyConditionExpression: 'postingEndDate = :value', // a string representing a constraint on the attribute
ExpressionAttributeValues: { // a map of substitutions for all attribute values
':value': '2018-10-26'
}
};
docClient.query(params, function(err, data) {
if (err) ppJson(err); // an error occurred
else ppJson(data); // successful response
});