我有这个dynamodb查询:
aws dynamodb create-table --table-name learnerpal-units-dev --attribute-definitions AttributeName=unitID,AttributeType=S AttributeName=ownerName,AttributeType=S --key-schema AttributeName=unitID,KeyType=HASH --global-secondary-indexes IndexName=unitOwnerIndexDev,KeySchema=["{AttributeName=ownerName,KeyType=HASH}"],Projection="{ProjectionType=ALL}",ProvisionedThroughput="{ReadCapacityUnits=1,WriteCapacityUnits=1}" --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 --endpoint-url http://localhost:8000
我希望它只返回一行具有唯一的unitID及其所有者。但是返回的数据在unitID方面并不是唯一的。它确实过滤了所有者。 unitID是主键(HASH),所有者是全局二级索引。
这是我的表:
let storyboard = UIStoryboard(name: "Main", bundle:nil)
let frontviewcontroller = storyboard.instantiateViewControllerWithIdentifier(navigationcontrollerid) as? UINavigationController
let rearViewController = storyboard.instantiateViewControllerWithIdentifier(id) as? UITableViewController
let mainRevealController = SWRevealViewController()
mainRevealController.frontViewController = frontviewcontroller
mainRevealController.rearViewController = rearViewController
self.window?.rootViewController = mainRevealController
self.window?.makeKeyAndVisible()
答案 0 :(得分:1)
请使用FilterExpression
按非关键属性过滤数据。在上述情况下,unitID
不是GSI中密钥的一部分。
以下params
对我来说很好(即结果只有一个项目)。
var params = {
TableName : table,
IndexName : "unitOwnerIndexDev",
KeyConditionExpression : 'ownerName= :hkey',
FilterExpression : 'unitID = :unitIdVal',
ExpressionAttributeValues : {
':hkey' : 'owner1',
':unitIdVal' : '1'
}
};