我是DynamoDB的新手。如果我做一个GSI,我可以用KeyConditionExpression: contains(GSI,:val1)和contains(GSI,:val2)进行查询吗?会是全面扫描吗?
你需要做一个扫描。查询只支持begins_with
、>=
、<=
、>
、<
、=
、between
。
参见查询关键条件表达式
没有Query
API,正如@Maurice所说。但是,您可以实现相同的"查询",而不是"扫描"。最终结果为ExecuteStatement和PartiQL语句,其中IN
操作符应用于所讨论的索引键。例如,2个分区键值:
SELECT * from "my_table"."GSI" WHERE my_gsi_pk_key IN ['val1', 'val2']
作为查询操作执行。这个答案有一个完整的例子。
注意:您别无选择,只能在这里使用PartiQL,但通常我建议在学习DynamoDB时避免使用它。核心API更好地迫使您学习DynamoDB的习惯用法,并忘记RDBMS/SQL的思想。