我正在使用不存在的开始键查询全局二级索引,并且看到了一些奇怪的结果。这是 ddb 错误还是(未?)记录的行为?有解决方法吗?
我有一个表,主 hashKey 为“id”,ShopIndex GSI 为“shop”。两者都没有范围键。
当我使用不存在的开始键“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,它会返回第四个不同的项目。
重量级
据我所知,除了查找“id”并在尝试将其用作开始键之前确认它存在之外,没有其他方法可以检测到这一点?
我是否在文档中错过了这一点,或者这是我需要解决的另一个不包括 aws 地雷的电池?