Я запрашиваю глобальный вторичный индекс с начальным ключом, которого не существует, и вижу некоторые странные результаты. Это ошибка ddb или (не?) Задокументированное поведение? Есть ли обходные пути?
У меня есть таблица, в которой основной hashKey является «id», а ShopIndex GSI - «магазином». Оба без rangeKeys.
Когда я запрашиваю, используя начальный ключ "id", который не существует, я ожидаю получить пустой ответ с правильным последним оцененным ключом, поскольку нет результатов для возврата после недопустимого начального ключа. .
Однако то, что я вижу, - это, казалось бы, случайные результаты.
Пример кода:
Этот фрагмент возвращает один элемент из индекса. Не первый результат. Не последний.
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB();
dynamodb.query({
TableName: 'products',
IndexName: 'ShopIndex',
Limit: 1,
ExpressionAttributeValues: {
':shop': { S: 'shop_KgHqp62taEV' }
},
KeyConditionExpression: 'shop = :shop',
ExclusiveStartKey: {
id: { S: 'doesnotexist' },
shop: { S: 'shop_KgHqp62taEV' },
},
}, (err, result) => {
if (err) throw err;
console.log('result', JSON.stringify(result, null, 2));
});
Если я полностью удалю ключ запуска, он вернет другой элемент.
Если я добавлю его обратно и установлю ScanIndexForward: false, он вернет третий другой элемент.
Если я удалю ключ запуска И установлю ScanIndexForward: false, он вернет четвертый другой элемент.
Wtf.
Насколько я могу судить, нет другого способа обнаружить это, кроме как найти "id" и подтвердить его существование, прежде чем пытаться использовать его в качестве стартового ключа?
Я пропустил это в документации, или это еще одна батарейка, не включенная в комплект, а также мина, которую мне нужно обойти?
KeyConditionExpression: 'shop = :shop'
не делает то, что вы намереваетесь, а вместо этого всегда верно? - person Michael - sqlbot   schedule 22.06.2018Limit: 1,
, что означает, что вы потенциально маскируете неправильное поведение, которое всегда присутствует, и вы, по сути, получаете правильный результат случайно. Что происходит с большим пределом, когда запись существует? Если вы получите как правильные, так и неправильные ответы, это должно подтвердить это. - person Michael - sqlbot   schedule 23.06.2018shop
? - person Michael - sqlbot   schedule 07.07.2018