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