sr_*_*149 4 go query-parameters amazon-dynamodb aws-sdk
TableName:人
id | 名字| 年龄| 地点
id_1 | A | 23 | 新西兰
id_2 | B | 12 | 印度
id_3 | C | 26 | 新加坡
id_4 | D | 30 | 火鸡
keys:id - > hash和age-> range
问题1
我正在尝试执行一个查询:"从年龄> 25岁的人中选择*"我可以使用"从id = id_1和年龄> 25岁的人中选择年龄"这样的查询,这不是我需要的,只需要选择所有值.
如果我不需要年龄作为范围索引,我应该如何修改我的查询参数只返回符合标准的记录列表:年龄> 25?
问题2
当第23行或第24-41行被注释时,AWS会抛出错误.:查询错误:ValidationException:必须在请求中指定KeyConditions或KeyConditionExpression参数.状态码:400,请求ID:[]
是否需要KeyConditions/KeyConditionsExpressions参数?这是否意味着我无法在不属于索引一部分的参数上查询表?
func queryDynamo() {
log.Println("Enter queryDynamo")
svc := dynamodb.New(nil)
params := &dynamodb.QueryInput{
TableName: aws.String("people"), // Required
Limit: aws.Long(3),
// IndexName: aws.String("localSecondaryIndex"),
ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{
":v_age": { // Required
N: aws.String("25"),
},
":v_ID": {
S: aws.String("NULL"),
},
},
FilterExpression: aws.String("age >= :v_age"),
// KeyConditionExpression: aws.String("id = :v_ID and age >= :v_age"),
KeyConditions: map[string]*dynamodb.Condition{
"age": { // Required
ComparisonOperator: aws.String("GT"), // Required
AttributeValueList: []*dynamodb.AttributeValue{
{ // Required
N: aws.String("25"),
},
// More values...
},
},
"id": { // Required
ComparisonOperator: aws.String("EQ"), // Required
// AttributeValueList: []*dynamodb.AttributeValue{
// S: aws.String("NOT_NULL"),
// },
},
// More values...
},
Select: aws.String("ALL_ATTRIBUTES"),
ScanIndexForward: aws.Boolean(true),
}
//Get the response and print it out.
resp, err := svc.Query(params)
if err != nil {
log.Println("Query Error: ", err.Error())
}
// Pretty-print the response data.
log.Println(awsutil.StringValue(resp))
}
Run Code Online (Sandbox Code Playgroud)