I'm using the following Go code to get only ONE registry in my dynamoDB table, but instead, it's returning all of them:
condition1 := expression.Name("id").Equal(expression.Value(id))
condition2 := expression.Name("apiKey").Equal(expression.Value(apiKey))
projection := expression.NamesList(
expression.Name("data"),
)
expr, err := expression.NewBuilder().
WithFilter(condition1).
WithFilter(condition2).
WithProjection(projection).
Build()
if err != nil {
return "", err
}
req := svc.ScanRequest(&dynamodb.ScanInput{
TableName: aws.String(awsEnv.Dynamo_Table),
ExpressionAttributeNames: expr.Names(),
ExpressionAttributeValues: expr.Values(),
FilterExpression: expr.Filter(),
ProjectionExpression: expr.Projection(),
})
result, err := req.Send()
if err != nil {
// TODO
}
fmt.Println(result.Items)
This should contain only one registry, since there is only one registry that satisfies the id filter condition, but instead, I'm getting ALL registries.
Am I missing something?
The ScanInput exist attribute Setlimit (receive int64), you did not declare it:
req := svc.ScanRequest(&dynamodb.ScanInput{
Setlimit: 1,
TableName: aws.String(awsEnv.Dynamo_Table),
ExpressionAttributeNames: expr.Names(),
ExpressionAttributeValues: expr.Values(),
FilterExpression: expr.Filter(),
ProjectionExpression: expr.Projection(),
})
read more: https://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/#ScanInput.SetLimit