为了账号安全,请及时绑定邮箱和手机立即绑定

查询不是 DynamoDb 索引的参数

查询不是 DynamoDb 索引的参数

Go
慕哥9229398 2021-10-25 16:49:55
表名:人身份证 | 姓名 | 年龄 | 地点id_1 | 一个 | 23 | 新西兰id_2 | 乙 | 12 | 印度id_3 | C | 26 | 新加坡id_4 | D | 30 | 火鸡键: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...                    },                },
查看完整描述

1 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

DynamoDB 是一个基于 NoSQL 的系统,因此如果不进行表扫描,您将无法根据非索引字段的条件检索所有记录。

表扫描将导致 DynamoDB 遍历表中的每条记录,对于大表来说,这在时间(速度慢)或金钱(预置读取 IOPS)方面都非常昂贵。

使用过滤器是正确的方法,如果您从查询切换到扫描,它将允许操作完成。查询必须始终指定哈希键。

不过有一句警告:如果您计划对在前端公开的不仅仅是几个(少于 100 个)项目的表使用扫描操作,您会对结果感到失望。如果这是响应时间无关紧要的某种类型的 cron 作业或后端报告任务,这是一种可接受的方法,但请注意不要耗尽所有 IOPS 并影响前端应用程序。


查看完整回答
反对 回复 2021-10-25
  • 1 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信