试图理解查询表操作在DynamoDB . net
本文关键字:DynamoDB net 操作 查询表 | 更新日期: 2023-09-27 18:01:20
我正在使用DynamoDB . net并试图理解它,但我对做以下句子有疑问:"获得具有特定值的所有行"。例如,我有以下表格:
Id |公司|代码
其中Id和Company是主键(组合),我的查询将是"获取属于具有其Id的公司的所有代码"
我读到扫描操作比查询更昂贵,如果我的表有一个由哈希和范围属性组成的主键,我应该使用查询语句。
好的,我开始编码我的句子,我有这个:
Table table = Table.LoadTable(dynamoClient, tablename );
QueryFilter filter = new QueryFilter();
filter.AddCondition("Company", QueryOperator.Equal, company); //company is a parameter
QueryOperationConfig config = new QueryOperationConfig()
{
Filter = filter,
Select = SelectValues.SpecificAttributes,
AttributesToGet = new List<string> { "Id","Code" },
ConsistentRead = true
};
Search tableResult = myTable.Query(config);
当我执行它时,我有以下错误:
当选择获取ALL_ATTRIBUTES
时不能指定attributestget
我读了文档,但我不明白,我正在看这个问题如何查询范围键在DynamoDB编程,但没有帮助我。
很明显,我做得不好,我的知识有限。所以,有人可以解释我如何实现查询,或者如果我必须使用扫描操作?
非常感谢。如果需要更多的信息,请告诉我。
嗯,在搜索和测试了很多可能的解决方案后,我可以理解我对我的表所做的是错误的。事情是这样的:
我的表是由:
- HASH KEY = id
- RANGE = Company
- 属性NOT KEY = Code
,我想要得到所有特定公司的代码。所以,我试图使用RANGE条件而不是使用HASH键查询表,这是错误的!
将表模型更改为
- HASH KEY = Company
- RANGE = id
- 属性NOT KEY = Code
工作完美
这解释了一切(来自Amazon Dynamodb官方文档)
查询操作仅使用主键属性值查找表或二级索引中的项。您必须提供散列键属性名称和要搜索的不同值。您可以选择提供范围键属性名称和值,并使用比较运算符来优化搜索结果。默认情况下,Query操作返回具有指定主键的项的所有数据属性;但是,您可以使用ProjectionExpression参数,以便Query操作只返回一些属性,而不是所有属性。
如果你想了解更多关于
的信息,这里是链接(更新)在深入阅读之后,我可以理解GSI (Global Secondary Index)的概念。尊重表的初始模型并向[Company,Code]添加一个GSI,我就可以毫无问题地执行查询了。