Go'da DynamoDB Query (AWS SDK v2)

Query, bir bölüm anahtarını paylaşan her öğeyi okur ve isteğe bağlı olarak sıralama anahtarına göre daraltır. Go v2 için AWS SDK'da bir dynamodb.QueryInput üzerinde bir KeyConditionExpression yazarsınız ve yerleşik QueryPaginator, sizin için her sonuç sayfasında LastEvaluatedKey'i takip eder.

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))
}

Açıklama

  • KeyConditionExpression — bölüm anahtarı üzerinde bir eşitlik (#hashKey = :hashKeyValue), artı en fazla bir sıralama anahtarı koşulu (=, <, <=, >, >=, BETWEEN veya begins_with) içermelidir. #hashKey/#rangeKey takma adları ExpressionAttributeNames aracılığıyla Artist/SongTitle'a çözümlenir (ayrılmış sözcük güvenli).
  • ExpressionAttributeValues:placeholder → türlü-değer eşlemesi (&types.AttributeValueMemberS{...}).
  • Sayfalama — bir Query en fazla 1 MB döndürür. dynamodb.NewQueryPaginator istemciyi sarmalar ve LastEvaluatedKey tükenene kadar çağırmaya devam eder; HasMorePages() / NextPage(ctx) döngüsü SDK'nın kanonik desenidir.
  • Sıralama anahtarı sırasını ters çevirmek için ScanIndexForward: aws.Bool(false) ayarlayın (artan varsayılandır).
  • IndexName: aws.String("...") ekleyerek bir ikincil indeksi sorgulayın.
  • Koşulları kodda oluşturmayı mı tercih edersiniz? expression paketi (github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression), expression.Key(...).Equal(...) oluşturucularını bir araya getirir ve ad/değer eşlemelerini üretir; attributevalue.UnmarshalListOfMaps, page.Items'ı Go struct'larına dönüştürür.

Görsel olarak yapın

DynamoDB Expression Builder, anahtar koşulunu bir araya getirir ve çalıştırılabilir kodu kopyalar; böylece yer tutucu ve değer eşlemelerini elle yazmazsınız.

Gerçek tablolara karşı bir grafik arayüzde (GUI) sorgu çalıştırmak için — anahtar-koşul formu, sayfalanmış ızgara, kod olarak kopyalama — DynoTable'ı indirin.

İlgili örnekler

References

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Bu isteği görsel olarak oluşturun

Bu operasyonu ücretsiz DynamoDB Sorgu Oluşturucuda kurun — anahtar koşulu, filtre, index, Limit, sıralama yönü ve bir sayfalama döngüsü — ve çalıştırılabilir bir SDK v3, CLI veya boto3 programı olarak geri kopyalayın.

DynamoDB Sorgu Oluşturucuyu aç

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.