Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dynamodbjavascript–;按主键和范围键数组进行查询?_Javascript_Node.js_Amazon Dynamodb - Fatal编程技术网

dynamodbjavascript–;按主键和范围键数组进行查询?

dynamodbjavascript–;按主键和范围键数组进行查询?,javascript,node.js,amazon-dynamodb,Javascript,Node.js,Amazon Dynamodb,DynamoDB新手,需要执行上述查询,但不确定如何执行。这是我目前正在尝试的,下面是我得到的错误 顺便说一句,我正在使用这个javascript库w/DynamoDB: 我得到的错误如下: ValidationException:一个或多个参数值无效:中的ComparisonOperator对于L AttributeValue类型无效 不支持中的。KeyCondition的文档说明了它支持的运算符: 对于KeyConditions,仅使用以下比较运算符 支持: EQ|LE|LT|GE|GT|以

DynamoDB新手,需要执行上述查询,但不确定如何执行。这是我目前正在尝试的,下面是我得到的错误

顺便说一句,我正在使用这个javascript库w/DynamoDB:

我得到的错误如下:

ValidationException:一个或多个参数值无效:中的ComparisonOperator对于L AttributeValue类型无效

不支持中的
KeyCondition
的文档说明了它支持的运算符:

对于KeyConditions,仅使用以下比较运算符 支持:

EQ
|
LE
|
LT
|
GE
|
GT
|
|
开始

EQ
运算符也仅适用于单个值:

  • EQ
    :相等

    AttributeValue列表只能包含一个类型为String、Number或Binary(非集合类型)的AttributeValue。如果项包含与请求中指定类型不同的AttributeValue元素,则该值不匹配。例如,
    {“S”:“6”}
    不等于
    {“N”:“6”}
    。而且,
    {N:“6”}
    不等于
    {NS:[“6”,“2”,“1”]}

对的限制基本相同,这是一种更新的、推荐的键过滤方法。以下是文档中的一个片段(我的重点):

该条件必须对单个哈希键执行相等测试 价值观该条件还可以执行多个比较测试之一 在单个范围键值上。查询可以使用KeyConditionExpression 检索具有给定哈希和范围键值的一个项,或检索多个项 具有相同哈希键值但不同范围键值的项


在您的情况下,可以按照中所述的类似方式构建。使用In语句的唯一方法是使用筛选条件。 但是,筛选器表达式只能包含非主键属性。 因此,您想要实现的查询是而不是主键。 像这样的

var params = {
    TableName: 'apps',
    ...
    FilterExpression: "#id IN (:one,:two)",: 
...
仅在具有非主键属性时才可能

可以应用的解决方法是使用批处理get 因此,不是发出一个查询,而是在一次调用中发出多个查询,并且每个条件应包含来自ids数组的值


当涉及到批处理获取项目时,请注意读取容量单位()。

我也在关注同样的事情,但根据您的链接,FilterExpression不允许使用键属性。不能基于分区键或排序键定义筛选器表达式。
。回到第一步,我也是StevendeSalas,这似乎是一个巨大的限制。你找到解决办法了吗?我将首先执行批处理get,然后在内存中执行任何额外的过滤——但对于一个相当简单的查询来说,这显然是过火了。
var params = {
    TableName: 'apps',
    ...
    FilterExpression: "#id IN (:one,:two)",: 
...