Dynamodb 错误:必须在请求中指定 keycondition 或 keyconditionexpression 参数

问题描述 投票:0回答:2

在 C# 中使用 AWS DynamodB 文档模型查询 DynamoDB 表时,我观察到意外结果。

我的表

users
有一个用户名主键。 GSI 设置为
user_type
user_id
username
键。

Querying my dynamodb

当我插入文档时,该表可以工作,但是当查询非索引但包含 GSI 的列时,它会返回此错误:

必须在请求中指定 KeyConditions 或 KeyConditionExpression 参数。

我已经在过滤器对象中指定了条件。为什么要求我提供

KeyConditions
KeyConditionExpression
?是否必须指定它们?如果是,我该怎么做?

c# amazon-dynamodb aws-toolkit
2个回答
2
投票

文档中并不是 100% 清楚,但我相信如果您使用 DocumentModel 库只有当您的 GSI 具有范围键和分区键时,查询才会工作。相反,我会考虑使用标准 sdk QueryRequest

另一件事要检查的是您正在使用Amazon.DynamoDBv2.DocumentModel,因为在版本1中,您必须显式指定haskey


0
投票

您可以通过 2 种方式执行 DynamoDB 搜索:

  • 扫描
  • 查询

如果您选择

scan
,基本上您将扫描数据库的所有项目,并仅返回那些满足您作为“过滤器”传递的条件的项目。

如果您选择

query
,您将首先搜索索引,默认情况下仅创建一个索引,即表的主ID(默认情况下:
id
)。当您使用查询时,您必须在“过滤器”表达式之前指定要执行的“keyCondition(s)”表达式。

您在这里看到的错误是,由于您使用的是

query
,因此您需要通过
keyConditions
。请注意,keyCondition(s) 是类似于过滤器的表达式,但仅包含您为其创建索引的字段。换句话说,如果
user_id
不是主 ID,则为该字段创建索引。

© www.soinside.com 2019 - 2024. All rights reserved.