DynamoDB新手并且需要执行上述查询,但不确定如何操作。这是我目前正在尝试的,我收到以下错误。
顺便说一句,我正在使用这个带有DynamoDB的JavaScript库:https://github.com/awslabs/dynamodb-document-js-sdk
var ids = ['12313','12312313','12312313'];
var params = {
TableName: 'apps',
IndexName: 'state-app_id-index',
KeyConditions: [
DynamoDB.Condition("state", "EQ", "active"),
DynamoDB.Condition("id", "IN", ids)
]
};
DynamoDB.query(params, function(error, response) {});
我得到的错误如下:
ValidationException:一个或多个参数值无效:ComparisonOperator IN对L AttributeValue类型无效
答案 0 :(得分:4)
KeyConditions
不支持IN
运算符。 KeyCondition
的文档说明了它支持的运算符:
对于KeyConditions,只有以下比较运算符 支持:
EQ
|LE
|LT
|GE
|GT
|BEGINS_WITH
|BETWEEN
EQ
运算符仅适用于单个值:
EQ
:相等。AttributeValueList 只能包含一个String,Number或Binary(不是set类型)的 AttributeValue 。如果项包含与请求中指定的类型不同的AttributeValue元素,则该值不匹配。例如,
{"S":"6"}
不等于{"N":"6"}
。此外,{"N":"6"}
不等于{"NS":["6", "2", "1"]}
。
KeyConditionExpression
的限制基本相同,这是过滤密钥的新推荐方法。这是文档中的一个片段(强调我的):
条件必须对单个哈希键执行相等性测试 值。 该条件还可以执行多个比较测试之一 单个范围键值。 查询可以使用 KeyConditionExpression 检索具有给定散列和范围键值的一个项目,或几个 具有相同散列键值但不同的范围键值的项目
在您的情况下,您可以按照FilterExpression
中所述的类似方式构建this answer。
答案 1 :(得分:1)
使用IN语句的唯一方法是使用过滤条件。 但是,Filter表达式只能包含非主键属性。 因此,您希望使用主键实现的查询 NOT 。 像这样的东西
FileDialog {
id: dialog
property var request
onRejected: request.dialogReject()
onAccepted: {
yourSavedFolder = folder;
request.dialogAccept(files);
}
}
WebEngineView {
onFileDialogRequested: {
request.accepted = true; // inhibit default dialog
dialog.request = request;
dialog.folder = yourSavedFolder;
dialog.open()
}
}
仅适用于非主键属性
您可以应用的变通方法是使用批次获取item 因此,不是在一次调用中发出一个查询问题,而是每个条件都应包含来自ids数组的值。
批量获取项目时,请注意读取容量单位(batch get item in node.js)。