试图理解查询表操作在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编程,但没有帮助我。

很明显,我做得不好,我的知识有限。所以,有人可以解释我如何实现查询,或者如果我必须使用扫描操作?

非常感谢。如果需要更多的信息,请告诉我。

试图理解查询表操作在DynamoDB . net

嗯,在搜索和测试了很多可能的解决方案后,我可以理解我对我的表所做的是错误的。事情是这样的:

我的表是由:

  • 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,我就可以毫无问题地执行查询了。