【问题标题】:dynamodb query multiple values from GSIdynamodb 从 GSI 查询多个值
【发布时间】:2020-04-16 20:40:10
【问题描述】:

我有一个发电机数据库表(id(pk),name(sk),email,date,itemId(number)) 和 GSI on (itemId pk, date(sk) 尝试查询 itemIds [1,2,3,4] 的数组,但在执行时使用 KeyExperssionValue 中的 IN 语句出错

aws.DocClient.query

 const IdsArrat = [1,2,3,4,5];
 const query: {
  IndexName: 'accountId-createdAt-index',
  KeyConditionExpression: 'itemId IN (:a1,:a2,:a3)',
  ExpressionAttributeValues: {
    {
        ':a1':1,
        ':a2':2,
          .......
    }
  },
  ScanIndexForward: false,
},

在使用 IN 语句时出错。

这样可以在 dynamoDb 中查询 GSI 上的多个值吗?

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

    您正尝试在 GSI 中查询多个不同的分区键。这只能通过执行多个单独的查询(示例中的 3 个)来完成。 GSI 也可能会为单个分区键查找返回多个值,因此最好单独查询分区键“itemId”。

    请参阅以下内容以供参考: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-KeyConditionExpression

    【讨论】:

    • 您能否解释一下如何为单个分区键查询多个值(值数组)。例如,我想获取此数组 [1,2,3,4] 中的所有 itemId。是否可以在单个查询中进行
    • Dynamodb 是一个键值查找数据库。它不可能在单个查询中对 dynamo 查找多个分区键值。这就像说对于哈希表查找,您想要查找多个键但只有一个请求。在这种情况下,只需遍历您的数组并对 dynamodb 进行不同的调用。
    • 如果您的商品 ID 在一个范围内,如果您设置了正确的 GSI,则可能会返回多个。但同样在这种情况下,您需要一个包含所有项目 ID 的分区键,而项目 ID 将是您可以通过范围搜索的排序键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多