【问题标题】:Amazon DynamoDB multiple scan conditions with multiple BeginsWith具有多个 BeginsWith 的 Amazon DynamoDB 多个扫描条件
【发布时间】:2020-06-17 10:35:19
【问题描述】:

我在 Amazon DynamoDB 中有一个带有分区键和范围键的表。

表结构

Subscriber ID (partition key) | Item Id (Range Key) | Date        |...
123                           | P_345               | some date 1 | ...
123                           | I_456               | some date 2 |
123                           | A_678               | some date 3 | ... 

现在我想使用具有多个扫描条件的QueryAsync C# 库从表中检索数据。

  • HashKey = 123
  • 条件1;日期介于“某个日期 1”和“某个日期 2”之间
  • 条件 2。范围键以 I_ 和 P_ 开始

有什么方法可以使用 c# dynamoDB API 实现这一点? 请帮忙

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

    您需要执行以下操作(我不是 C# 专家,但您可以使用以下说明找到正确的 C# 语法来执行此操作):

    1. 因为您正在寻找特定的哈希键,所以这将是 Query 请求,而不是 Scan
    2. 您在范围键上有一个begins_with() 条件。您指定使用KeyConditionExpression 参数到QueryKeyConditionExpression 将要求 HashKey=123 AND begin_with(RangeKey,"P_")。
    3. 但是,KeyConditionExpression 不允许使用“OR”(范围键以“P_”或“I_”开头)。您只需要运行两个单独的查询 - 一个使用“I_”,一个使用“P_”(如果您愿意,您甚至可以并行执行这两个查询)。
    4. 日期不是关键列之一,因此您需要在查询中使用FilterExpression 参数对其进行过滤。请注意,过滤只发生在最后一步,在 DynamoDB 已经读取了与上述KeyConditionExpression 匹配的所有项目之后(如果过滤删除了很多项目并且您仍然需要为它们付费,这可能会增加您的成本)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多