看来 dynamodb 的
query
方法必须包含分区键作为过滤器的一部分。不知道分区键怎么查询?
例如,您有一个 User 表,其属性
userid
设置为分区键。现在我们想通过电话号码查找用户。是否可以在没有分区键的情况下执行查询?据我所知,使用 scan
方法可以实现此目标,但代价是在应用过滤器之前从表中提取所有项目。
您需要设置一个 全局二级索引 (GSI),使用您的
phoneNumber
列作为索引哈希键。
您可以通过调用 UpdateTable 创建 GSI。
创建索引后,您就可以使用 IndexName
调用
Query,根据电话号码提取用户记录。
如果您有全局二级索引,则索引的分区键就是属性名称。
例如
Properties:
TableName: entries
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: name
AttributeType: S
- AttributeName: display-name
AttributeType: S
KeySchema:
- AttributeName: name
KeyType: HASH
GlobalSecondaryIndexes:
- IndexName: display-name-index
KeySchema:
- AttributeName: display-name
KeyType: HASH
Projection:
ProjectionType: ALL
然后您可以使用查询功能(这是使用 PHP SDK,但参数名称在其他 SDK 中应该相同 - https://docs.aws.amazon.com/aws-sdk-php/v3/api /api-dynamodb-2012-08-10.html很好地涵盖了它):
$dynamoDB->query([
'TableName' => 'entries',
'IndexName' => 'display-name-index',
'ExpressionAttributeNames' => [
'#idx' => 'display-name'
],
'ExpressionAttributeValues' => [
':arg' => [
'S' => $key,
],
],
'KeyConditionExpression' => '#idx = :arg'
]);