Go(AWS SDK v2)中的 DynamoDB Query

Query 读取共享同一个分区键的每个项目,并可选地按排序键收窄。在 AWS SDK for Go v2 中,你在一个 dynamodb.QueryInput 上写一个 KeyConditionExpression,内置的 QueryPaginator 会替你跨每个结果页跟随 LastEvaluatedKey

Code

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
)

func main() {
	ctx := context.TODO()
	cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion("us-east-1"))
	if err != nil {
		log.Fatalf("load config: %v", err)
	}
	client := dynamodb.NewFromConfig(cfg)

	paginator := dynamodb.NewQueryPaginator(client, &dynamodb.QueryInput{
		TableName: aws.String("Music"),
		KeyConditionExpression: aws.String(
			"#hashKey = :hashKeyValue AND begins_with(#rangeKey, :rangeKeyValue)"),
		ExpressionAttributeNames: map[string]string{
			"#hashKey":  "Artist",
			"#rangeKey": "SongTitle",
		},
		ExpressionAttributeValues: map[string]types.AttributeValue{
			":hashKeyValue":  &types.AttributeValueMemberS{Value: "Arturo Sandoval"},
			":rangeKeyValue": &types.AttributeValueMemberS{Value: "C"},
		},
	})

	var items []map[string]types.AttributeValue
	for paginator.HasMorePages() {
		page, err := paginator.NextPage(ctx)
		if err != nil {
			log.Fatalf("query: %v", err)
		}
		items = append(items, page.Items...)
	}
	fmt.Printf("Found %d items\n", len(items))
}

说明

  • KeyConditionExpression — 必须包含分区键上的相等条件(#hashKey = :hashKeyValue),外加至多一个排序键条件(=<<=>>=BETWEENbegins_with)。#hashKey/#rangeKey 别名通过 ExpressionAttributeNames 解析为 Artist/SongTitle(保留字安全)。
  • ExpressionAttributeValues:placeholder → 带类型值映射(&types.AttributeValueMemberS{...})。
  • 分页 — 单次 Query 最多返回 1 MB。dynamodb.NewQueryPaginator 包装了客户端,并不断调用直到 LastEvaluatedKey 被耗尽;HasMorePages() / NextPage(ctx) 循环是 SDK 的规范模式。
  • 设置 ScanIndexForward: aws.Bool(false) 可反转排序键顺序(升序是默认值)。
  • 通过添加 IndexName: aws.String("...") 来查询二级索引。
  • 更想用代码构建条件?expressiongithub.com/aws/aws-sdk-go-v2/feature/dynamodb/expression)会组合 expression.Key(...).Equal(...) 构建器并生成名称/值映射;attributevalue.UnmarshalListOfMaps 会把 page.Items 转成 Go 结构体。

可视化操作

DynamoDB Expression Builder 会组装键条件并复制可运行代码,让你无需手写占位符和值映射。

想在 GUI 中针对真实表运行查询——键条件表单、分页网格、复制为代码——请下载 DynoTable

相关示例

References

Last verified 2026-07-13 against the official AWS documentation linked above.

可视化构建此请求

在免费的 DynamoDB 查询构建器中组装此操作 —— 键条件、筛选、索引、Limit、排序方向和分页循环 —— 再把它作为可运行的 SDK v3、CLI 或 boto3 程序复制回来。

打开 DynamoDB 查询构建器

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。