我试图在AWS DynamoDB中为多个值提供单个查询,场景是这样的。我想通过给出一个值列表来查询。如果值存在于db中(在一个特定的键,让我们说'mandatoryField'),那么给我这个值,这意味着在过滤结束时,我只想从我的数组输入中得到存在的值。
所以,对于这些项目在我的db:
column: mandatoryField
---------------
1. value1
2. value2
3. value3
4. value4
在我的查询命令中给出["value2", "value3334", "value7", "value1"]
的数组,我只想接收到存在的值:["value2", "value1"]
。
在aws-cli中尝试了这个查询,同时使用in和CONTAINS函数
aws dynamodb query
--table-name testTable
--key-condition-expression '#mandatoryField IN :values'
--expression-attribute-names '{ "#mandatoryField": "mandatoryField" }'
--expression-attribute-values '{
":values": { "SS": ["value2", "value3334", "value7", "value1"]}
}'
但收到了我所期望的An error occurred (ValidationException) when calling the Query operation: Invalid operator used in KeyConditionExpression: IN
希望这是足够的描述性来实现我的目标,通过给出一个QUERY
我认为您需要使用--filter-expression
而不是--key-condition-expression
使用AWS DynamoDBscan
命令。
试试这个:
aws dynamodb scan
--table-name testTable
--filter-expression 'contains(:values, mandatoryField)'
--expression-attribute-values '{
":values": { "SS": ["value2", "value3334", "value7", "value1"]}
}'
--projection-expression 'mandatoryField'
您可以使用ExecuteStatement
来为您提供类似BatchQuery
的语义。
aws dynamodb execute-statment
--statement 'SELECT * FROM test-table WHERE mandatoryField IN ["value2", "value3334", "value7", "value1"]'
您最多可以传入50个分区键值。