查询多个本地二级索引Dynamodb

时间:2017-07-08 03:29:56

标签: amazon-dynamodb

我的表中有2个LSI,主分区键带有主分类键

组织ID - 主分区键

ClientID-主要排序键

性别 - LSI

部分 - LSI

查询具有一个LSI的表没有问题,但如何在表模式中提及 2 LSI

 var params = {
 TableName:"MyTable",
 IndexNames: ['ClientID-Gender-index','ClientID-Section-index'], 

KeyConditionExpression : '#Key1 = :Value1 and #Key2=:Value2 and #Key3=:Value3', 

ExpressionAttributeNames:{
"#Key1":"Org-ID",
"#Key2":"Gender",
"#Key3":"Section"
},

ExpressionAttributeValues : {
':Value1' :"Microsoft",
':Value2':"Male",
':Value3':"Cloud Computing"
}};

任何人都可以在 IndexName (第3行)或KeyConditionExpression(第4行)中解决问题,我对此不太确定。

问题

条件可以是长度1或2

1 个答案:

答案 0 :(得分:12)

您一次只能查询一个DynamoDB索引。您不能在同一查询中使用多个索引。

一个简单的替代方法是使用单个索引并应用查询过滤器,但这可能需要扫描大量记录,而过滤器只会减少通过网络传输的数据量。

更高级的替代方法是制作复合键。您很可能希望在此用例中使用GSI而不是LSI。通过创建一个新的列,即Key1,Key2和Key3的字符串连接,您可以使用此GSI同时搜索所有三个键。这将通过重复数据使每个单独的记录更大,但它允许更复杂的查询模式。