Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
842 views
in Technique[技术] by (71.8m points)

node.js - DynamoDB Javascript – Query by primary key and array of range keys?

New to DynamoDB and need to do the above query, but not sure how. Here is what I'm trying currently, and I'm getting the error below.

Btw, I am using this javascript library w/ DynamoDB: 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) {});

The error I am getting is as follows:

ValidationException: One or more parameter values were invalid: ComparisonOperator IN is not valid for L AttributeValue type

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

KeyConditions does not support the IN operator. The documentation for KeyCondition says what operators it does support:

For KeyConditions, only the following comparison operators are supported:

EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN

The EQ operator only works for a single value as well:

  • EQ : Equal.

    AttributeValueList can contain only one AttributeValue of type String, Number, or Binary (not a set type). If an item contains an AttributeValue element of a different type than the one specified in the request, the value does not match. For example, {"S":"6"} does not equal {"N":"6"}. Also, {"N":"6"} does not equal {"NS":["6", "2", "1"]}.

The restrictions are basically the same for KeyConditionExpression, which is the newer, recommended way for filtering on keys. Here is a snippet from the documentation (emphasis mine):

The condition must perform an equality test on a single hash key value. The condition can also perform one of several comparison tests on a single range key value. Query can use KeyConditionExpression to retrieve one item with a given hash and range key value, or several items that have the same hash key value but different range key values

In your case, you could build out the FilterExpression in a similar way as described in this answer.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...