表名:人身份證 | 姓名 | 年齡 | 地點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 并影響前端應用程序。
- 1 回答
- 0 關注
- 201 瀏覽
添加回答
舉報
0/150
提交
取消