当前位置: 首页 > 知识库问答 >
问题:

如何使用KeyConditionExpression查询AWS DynamoDb?

戴鸿羲
2023-03-14

我有一个AWS DynamoDb表,
我有user_id作为索引或GSI(user_id-index),
还有product_type作为索引或GSI(prod_type-index).

我试图使用KeyConditionExpression来查询DynamoDb表,
但是我得到了一个-

Validation Exception, with message:"Query key condition not supported" and statusCode: 400
ValidationException: Query key condition not supported\n at Request.extractError 
{
  "id": "12345f9f-f08c-45ae-986a-f1b5ac712345",
  "user_id": 1234,
  "prod_type": "OTHER"
}
let AWS = require('aws-sdk');

AWS.config.update({
    region: 'us-east-1'
});

let connection = new AWS.DynamoDB.DocumentClient();

let table = "some_table";

let params = {
    IndexName : "user_id-index",
    ExpressionAttributeValues: {
        ":v1": {
            N: 1234
        },
        ":v2": {
            S: "OTHER"
        }
    },
    ExpressionAttributeNames: {
        "#userId": "user_id",
        "#prodType": "prod_type"
    },
    TableName: table,
    KeyConditionExpression: "#userId = :v1 and #prodType = :v2"
};

connection.query(params, function(err, data) {
    if (err) {
        console.log(err);
    } else {
        console.log(data);
    }
});

引用-
Dynamodb查询错误-不支持查询键条件
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/legacyconditionalparameters.keyconditions.html

共有1个答案

戚奇略
2023-03-14

正如我在前面的回答中提到的。不能将一个GSI/Primary的哈希键和另一个GSI/Primary的哈希键放在单个KeyConditionExpression上

条件必须对单个分区键值执行相等性测试

条件可以选择性地对单个排序键值执行多个比较测试中的一个。这允许查询检索具有给定分区键值和排序键值的一个项,或具有相同分区键值但不同排序键值的几个项。

partitionKeyName = :partitionkeyval AND sortKeyName = :sortkeyval

请记住partitionKeyName只支持相等性。sortKeyName支持多种不同操作

 类似资料:
  • 如何修复以下错误以及为什么会出现“操作数类型:M”?我已经阅读了aws文档并搜索了堆栈溢出,但几个小时后仍然无法解决此问题。我想以iso格式查询一个处于活动状态且日期介于开始日期和结束日期之间的项目。我将错误“操作数类型:M”解释为在操作数:datesell、:start和:end中使用映射类型。但是,所有操作数都只是字符串。 SQL命令类似于:SELECT datesell,profit FRO

  • 本文向大家介绍如何使用LIMIT查询MongoDB?,包括了如何使用LIMIT查询MongoDB?的使用技巧和注意事项,需要的朋友参考一下 使用limit()方法查询MongoDB。让我们创建一个包含文档的集合 在find方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是在MongoDB中使用LIMIT的查询- 这将产生以下输出-

  • 问题内容: 谁能帮助我获取下面提到的JPA查询的JPA标准查询。 问题答案: 假设Person与语言有关,这就是您在较早的Hibernate中所做的事情: 我第一次尝试使用JPA 2.0: 请让我知道这是否适合您。 编辑: 更新查询以仅使用一个呼叫。

  • 问题内容: 我有两个表: 这是我的查询: 并为此: 它在第一个表上使用的全索引扫描进行排序,但不使用y索引进行连接(在解释中)。这对性能非常不利,并且会杀死整个数据库服务器,因为这是一个非常频繁的查询。 我尝试使用反转表顺序,但这给了,甚至更糟。 有什么办法可以使mysql同时使用索引进行连接和排序? ===更新=== 我真的很绝望。也许某种形式的非规范化可以在这里有所帮助? 问题答案: 如果您有

  • 我有一个网络应用程序,用户在登录我们的系统后,可以进入一个页面授权gmail访问,通过谷歌的整个OAuth过程。这个过程完成了,我收到了access_token和refresh_token,还解析了用户子属性的id_token,并将其保存到数据库中。这样做的目的是,通过用户授权我们的应用程序,我们然后使用控制台应用程序中的访问和刷新令牌来检索他们的电子邮件,并将其与我们的内部系统同步。 在goog

  • 问题内容: 当我尝试使用此查询时,我收到一条错误消息,指出Perameter电子邮件不存在,我确定变量:email,login_pass,payment_method,operateur是有效的并且存在。 我尝试删除引号,但我得到了 您的Sql语法有错误,请在第1行的’:email,:login_pass,:payment_method,:avecpuce)’附近查看与您的SQL Server对应