Amazon dynamodb 使用带分区键和范围键的LSI查询Dynamodb

Amazon dynamodb 使用带分区键和范围键的LSI查询Dynamodb,amazon-dynamodb,Amazon Dynamodb,在DynamoDB中,我使用分区键和范围键配置了LSI(本地二级索引) 如何使用分区键值和范围键值查询DynamoDB表 在SQL中,我可以使用In操作符: SELECT * FROM genericTable WHERE partionKey = "foo" AND rangeKey IN ("bar1", "bar11", "bar5") 如何在DynamoDB中实现此功能 依照 查询可以使用KeyConditionExpression检索。。。几项 具有相同分区键值但不同排序

在DynamoDB中,我使用分区键和范围键配置了LSI(本地二级索引)

如何使用分区键值和范围键值查询DynamoDB表

在SQL中,我可以使用In操作符:

SELECT *
  FROM genericTable
 WHERE partionKey = "foo"
   AND rangeKey IN ("bar1", "bar11", "bar5")
如何在DynamoDB中实现此功能

依照

查询可以使用KeyConditionExpression检索。。。几项 具有相同分区键值但不同排序键值的

但是,在有效的比较运算符列表中,没有类似于SQL“in”的内容

有没有办法使用多个键条件表达式,如下面的SQL

SELECT *
  FROM genericTable
 WHERE partionKey = "foo"
   AND (rangeKey = "bar1"
    OR rangeKey = "bar5" ....)

根据AWS文件中给出的示例

排序键条件的有效比较如下所示:

  • sortKeyName=:sortkeyval-如果排序键值等于:sortkeyval,则为true
  • sortKeyName<:sortkeyval-如果排序键值小于:sortkeyval,则为true
  • sortKeyName:sortkeyval-如果排序键值大于:sortkeyval,则为true
  • sortKeyName>=:sortkeyval-如果排序键值大于或等于:sortkeyval,则为true
  • sortKeyName介于:sortkeyval1和:sortkeyval2之间-如果排序键值大于或等于:sortkeyval1且小于 或等于:sortkeyval2
  • 以(sortKeyName,:sortkeyval)开始\u-如果排序键值以特定操作数开始,则为true。(您不能使用此功能 使用编号类型的排序键。)
注意函数名以\u开头区分大小写

因此,范围仅支持没有或。您也可以尝试使用开头

您的场景可以转换为以下代码:

$tableName = "genericTable";
$response = $dynamodb->query([
    'TableName' => $tableName,
    'IndexName' => 'OrderCreationDateIndex',
    'KeyConditionExpression' => 'partionKey = :p_key and begins_with(rangekey, :range)',
    'ExpressionAttributeValues' =>  [
        ':p_key' => ['S' => 'foo'],
        ':range' => ['S' => 'bar']
    ],
    'Select' => 'ALL_PROJECTED_ATTRIBUTES',
    'ScanIndexForward' => false,
    'ConsistentRead' => true,
    'Limit' => 5,
    'ReturnConsumedCapacity' => 'TOTAL'
]);

好的,谢谢你的确认。“以开始”不太有效,因为表中可能有项目bar1、bar2、bar3、bar4,但参数列表可能只包含[bar1、bar2、someotherId]我不同意对原始问题的编辑,我要特别询问如何使用分区键和范围键值列表进行查询。问题的标题失去了这种区别。支持查询给定的分区键和单个范围键,但不支持查询范围键值列表,这正是我所要求的