根据DynamoDB Query API Documentation:
查询:
查询操作使用表的主键或二级索引
直接访问该表或索引中的项目。
使用 KeyConditionExpression 参数提供特定值
为分区键。查询操作将返回所有
具有该分区键值的表或索引中的项目。你可以
可选地通过指定 a 来缩小 Query 操作的范围
排序键 值和 KeyConditionExpression 中的比较运算符。
您可以使用 ScanIndexForward 参数向前获取结果
或倒序,按排序键。
KeyConditionExpression:
指定项的键值的条件
由 Query 操作检索。
条件必须对单个分区键执行相等测试
价值。该条件还可以执行几个比较测试之一
在单个排序键值上。查询可以使用 KeyConditionExpression 来
检索具有给定分区键值和排序键值的项目,
或具有相同分区键值但不同的多个项目
对键值进行排序。
分区键相等性测试是必需的,并且必须在
以下格式:
partitionKeyName = :partitionkeyval
如果您还想为排序键提供条件,则必须是
使用 AND 与排序键的条件相结合。以下是
一个示例,使用 = 比较运算符作为排序键:
partitionKeyName = :partitionkeyval AND sortKeyName = :sortkeyval
排序键条件的有效比较如下:
-
sortKeyName = :sortkeyval - 如果排序键值等于 :sortkeyval,则为 true。
-
sortKeyName < :sortkeyval - 如果排序键值小于 :sortkeyval,则为 true。
-
sortKeyName <= :sortkeyval - 如果排序键值小于或等于 :sortkeyval,则为 true。
-
sortKeyName > :sortkeyval - 如果排序键值大于 :sortkeyval,则为 true。
-
sortKeyName >= :sortkeyval - 如果排序键值大于或等于 :sortkeyval,则为 true。
-
sortKeyName BETWEEN :sortkeyval1 AND :sortkeyval2 - 如果排序键值大于或等于 :sortkeyval1 且小于则为真
或等于 :sortkeyval2。
-
begins_with ( sortKeyName, :sortkeyval ) - 如果排序键值以特定操作数开头,则为真。 (您不能使用此功能
使用 Number 类型的排序键。)
您可以选择使用 ExpressionAttributeNames 参数
用占位符替换分区键和排序键的名称
令牌。如果属性名称冲突,则可能需要此选项
带有 DynamoDB 保留字。例如,以下
KeyConditionExpression 参数会导致错误,因为 Size 是
保留字:
Size = :myval
要解决此问题,请定义一个占位符(例如 #S)来表示
属性名称大小。那么KeyConditionExpression如下:
#S = :myval
有关保留字的列表,请参阅 Amazon 中的保留字
DynamoDB 开发人员指南。
有关 ExpressionAttributeNames 和
ExpressionAttributeValues,请参阅使用占位符作为属性名称
和 Amazon DynamoDB 开发人员指南中的值。
类型:字符串
必填:否
您的场景可以转换为以下代码:
$tableName = "genericTable";
$response = $dynamodb->query([
'TableName' => $tableName,
'IndexName' => 'OrderCreationDateIndex',
'KeyConditionExpression' => 'partitionKeyName = :partitionkeyval AND sortKeyName = :sortkeyval',
'ExpressionAttributeValues' => [
':partitionkeyval' => ['S' => 'pkey'],
':sortkeyval' => ['S' => 'sortkey']
],
'Select' => 'ALL_PROJECTED_ATTRIBUTES',
'ScanIndexForward' => false,
'ConsistentRead' => true,
'Limit' => 5,
'ReturnConsumedCapacity' => 'TOTAL'
]);