尝试使用我的本地二级索引进行查询....如果我没有指定HashRangeKey,我会收到错误消息,说明它是必需的。如果我添加它,那么它会忽略范围条件。
查询似乎在AWS" Table Explorer"中工作正常,所以我认为这只是一个简单的错误或与库有关。
验证错误:[HashKeyValue]是必需对象:复合主键的哈希组件的属性值。
array(
'TableName'=>self::$_tableName,
'IndexName'=>'vote-index',
'KeyConditions' => array(
'itemId' => array(
'ComparisonOperator' => 'EQ',
'AttributeValueList' => array(
array('N'=>$itemId),
),
),
'vote' => array(
'ComparisonOperator' => 'EQ',
'AttributeValueList' => array(
array('N'=>$vote),
),
),
),
'Count' => true,
)
*根据此处的代码:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LowLevelPHPQuerying.html我不需要HashKeyValue。
这会运行,但它只会为我提供由HashKeyValue
过滤的结果array(
'TableName'=>self::$_tableName,
'IndexName'=>'vote-index',
'HashKeyValue'=>array(
'N'=>$itemId,
),
'RangeKeyValue'=>array(
'N'=>$vote,
),
)
错误:提供的关键元素与架构
不匹配array(
'TableName'=>self::$_tableName,
'IndexName'=>'vote-index',
'HashKeyValue'=>array(
'N'=>$itemId,
),
'RangeKeyCondition'=>array(
'ComparisonOperator' => 'EQ',
'AttributeValueList' => array(
array('N'=>$vote),
),
),
)
答案 0 :(得分:3)
This answer可能会有所帮助。
本地二级索引的功能类似于备用范围键...无论是查询表的主哈希键/范围键组合还是哈希键/本地二级索引,都必须指定一个哈希键(想想DynamoDB)作为一个大的哈希表......如果没有哈希键,就无法查看。)
来自DynamoDB Secondary Index Documentation(强调我的):
本地二级索引 - 与表具有相同哈希键的索引,但具有不同的范围键。本地二级索引是" local"从某种意义上说,本地二级索引的每个分区都限定为具有相同散列键的表分区。
如果要通过表中不是表的主哈希键的其他属性进行查询,则需要创建全局二级索引,这更像是备用表哈希键。遗憾的是,您只能在创建时指定索引,并且无法修改它们,因此您可能需要迁移表。