Alp*_*per 5 .net c# amazon-web-services nosql amazon-dynamodb
我正在使用 DynamoDB .NET 并试图理解它,但我对执行以下句子有疑问:“获取具有特定值的所有行”。例如,我有下表:
身份证 | 公司 | 代码
其中 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);
Run Code Online (Sandbox Code Playgroud)
当我执行该操作时,出现以下错误:
选择获取 ALL_ATTRIBUTES 时无法指定 AttributesToGet
我阅读了文档,但我不明白,我正在观看这个问题How to query range keyprogrammatically in DynamoDB,但对我没有帮助。
很明显我做得不好,而且我的知识有限。那么,有人可以解释我如何实现查询或者我是否必须使用扫描操作吗?
非常感谢。如果需要更多信息,请告诉我。
好吧,在搜索和测试了许多可能的解决方案来解决我的问题之后,我可以理解我对桌子所做的事情是错误的。事情是这样的:
我的桌子由以下人员组成:
- 哈希键 = id
- 范围 = 公司
- 属性非关键 = 代码
我想获取具有特定公司的所有代码。所以,我试图使用 RANGE 条件而不是使用 HASH KEY 来查询表,这是错误的!
将表模型更改为
- 哈希键 = 公司
- 范围 = id
- 属性非关键 = 代码
完美运作
这解释了一切(来自官方 Amazon Dynamodb 文档)
查询操作仅使用主键属性值查找表或二级索引中的项目。您必须提供哈希键属性名称和要搜索的不同值。您可以选择提供范围键属性名称和值,并使用比较运算符来优化搜索结果。默认情况下,查询操作返回具有指定主键的项目的所有数据属性;但是,您可以使用 ProjectionExpression 参数,以便 Query 操作仅返回部分属性,而不是全部属性。
如果您想了解更多信息,请点击以下链接
[更新]读得更深入后,我可以理解GSI(全球二级指数)的概念。尊重表的初始模型并将 GSI 添加到 [Company,Code],我可以毫无问题地执行查询。
| 归档时间: |
|
| 查看次数: |
10131 次 |
| 最近记录: |