You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDB GSI未按预期索引条目问题求助

问题分析与解决方案

你的核心问题源于对DynamoDB GSI(全局二级索引)规则的误解:当GSI定义了排序键时,只有主表中同时包含GSI分区键和排序键的条目,才会被自动投影到GSI中。你当前的GSI配置指定了GSI1SK作为排序键,因此只有带有该属性的主表条目才会出现在GSI里,这是DynamoDB的默认行为,并非代码错误。

针对你的需求(以主表SK为GSI分区键,GSI1SK作为可选排序键),提供两种解决方案:

方案一:移除GSI排序键(适用于所有带SK的条目都需进入GSI的场景)

如果希望所有主表条目(均包含SK)都被纳入GSI,无论是否有GSI1SK,只需删除GSI配置中的排序键定义。此时GSI仅以SK为分区键,所有主表条目都会被投影到GSI中;后续若部分条目添加了GSI1SK,这些条目会在GSI中自动按该字段排序。

修改后的代码:

this.leaderboardsTable.addGlobalSecondaryIndex({
    indexName: 'GSI1',
    partitionKey: { name: 'SK', type: dynamodb.AttributeType.STRING },
    projectionType: dynamodb.ProjectionType.INCLUDE,
    nonKeyAttributes: ['participant_display_name']
})

方案二:为无GSI1SK的条目设置默认值(适用于必须保留GSI排序键的场景)

若你确实需要GSI保留排序键,但希望无GSI1SK的条目也能进入GSI,可以在写入主表数据时,为这类条目设置一个默认的GSI1SK值(比如空字符串""或固定占位符"NO_SORT_KEY")。这样所有条目同时具备GSI的分区键(SK)和排序键(GSI1SK),都会被纳入GSI。

另外你提到的“GSI条目PK和SK与主表一致”是正常现象:DynamoDB会自动将主表的主键(PK、SK)投影到GSI中,无论你设置的投影类型是什么。GSI的索引逻辑是按自身的分区键(SK)和排序键(GSI1SK)来组织数据的,你通过GSI查询时,指定SK作为分区键,即可按预期获取排序后的结果。

内容的提问来源于stack exchange,提问作者user22265191

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:37:06