使用本地二级索引执行DynamoDB Query返回空结果求助
排查DynamoDB Query本地索引返回空的问题
先修正代码里的异步处理问题:client.send(command)是异步操作,你没有用await,所以res拿到的是Promise对象,不是实际查询结果。修改代码如下:
try { res = await client.send(command); } catch(err) { console.log(1, JSON.stringify(err)); }
这一步先确保你能拿到真实的响应数据,而非Promise对象。
接下来针对本地二级索引(LSI)的查询逻辑,逐一排查以下点:
- 确认索引键结构:本地二级索引的分区键必须和主表分区键完全一致。检查
LITimestamp索引的定义,确认其分区键为PK,且你查询的account#225873187286700#chat确实存在于主表的PK中,且对应条目被包含在该索引内。 - 索引同步状态:新创建的LSI需要时间同步数据,若索引刚创建,等待一段时间后再尝试查询。
- 主表数据与投影规则:确认主表中存在
PK = account#225873187286700#chat的条目,且这些条目满足LSI的投影条件(若索引设置了投影限制,需确保目标字段被包含)。 - 名称拼写准确性:检查
TableName和IndexName的拼写(包括大小写),DynamoDB对这些名称大小写敏感。
若修正异步问题后仍返回空,建议直接在DynamoDB控制台用相同条件执行Query:
- 控制台能返回数据:说明代码存在配置错误(如区域、凭证、表名拼写)。
- 控制台也返回空:说明索引中确实无匹配数据,需检查索引定义或主表数据是否符合预期。
内容的提问来源于stack exchange,提问作者Ilya Shcherbakov
相关产品推荐
相关产品推荐

