代码之家  ›  专栏  ›  技术社区  ›  friartuck

获取由一组哈希键的排序键决定的最新项目

  •  0
  • friartuck  · 技术社区  · 4 年前

    在DynamoDB表中,主键由分区键(documentId-string)和排序键(review-string)组成。

    documentId | revision | details (JSON)
           A   | 5        | { title: "Where's Wally New" }
           A   | 2        | { title: "Where's Wally" }
           B   | 3        | { title: "The Grapes of Wrath" }
           C   | 4        | { title: "The Great Gatsby" }
    

    对于一组documentId,我想获取排序键定义的这些文档的最新修订。例如,我想获得documentId(A,B)的最新修订的详细信息。这应该会回来(“Wally在哪里 《愤怒的葡萄》)。

    如果你一次只查找一个哈希键/documentId(例如。 NoSQL: Getting the latest values from tables DynamoDB/Azure Table Storage ),但如果我想避免进行多次读取查询,这可能吗?

    1 回复  |  直到 4 年前
        1
  •  1
  •   hunterhacker    4 年前

    您正在查找批处理查询。它不存在(至少在今天)。请参阅上一个关于此的问题 DynamoDB batch execute QueryRequests

    其中一条评论建议PartiQL可以提供帮助。但是没有。根据 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/workbench.querybuilder.partiql.html

    与BatchGetItem操作一样,只支持单例读取操作。不支持扫描和查询操作。

        2
  •  0
  •   Avramo    4 年前

    您可以按排序键进行排序。
    默认情况下,结果按升序排序,可以是数字顺序,也可以是UTF-8顺序。 如 docs :

    查询结果始终按排序键值进行排序。如果排序键的数据类型为Number,则按数字顺序返回结果;否则,将按UTF-8字节的顺序返回结果。默认情况下,排序顺序为升序。若要颠倒顺序,请将ScanIndexForward参数设置为false。

    要反转并按降序排序,您需要设置 "ScanIndexForward": false 在您的查询中。 现在,要只接收列表的顶部-这将是最新的修订版,即该文档ID的最高修订号-您可以通过将结果限制为一个
    "Limit": 1

    然而,由于您使用字符串作为排序键,您将遇到数字“9”和“10”等问题,因为字符串“10”的“值”小于字符串“9”,因为它以“1”开头。 我建议将修订号改为数字以解决此问题。

    干杯