DynamoDB Javascript - 按主键和范围键数组查询?

时间:2015-06-02 07:11:47

标签: javascript node.js amazon-dynamodb

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类型无效

2 个答案:

答案 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)。