如何获取 DynamoDB 列中的最大数量?
Posted
技术标签:
【中文标题】如何获取 DynamoDB 列中的最大数量?【英文标题】:How to get the maximum number in DynamoDB column? 【发布时间】:2021-01-28 06:31:38 【问题描述】:我有一个名为 URLArray 的 DynamoDB 表,其中包含一个 URL 列表 (myURL) 和一个唯一的视频编号 (myNum)。
我使用 AWS Amplify 来查询我的表,例如:
URLData = await API.graphql(graphqlOperation(getUrlArray, id: "173883db-9ff1-4...."));
myNum 也是一个 GSI,所以我也可以使用它查询行,例如:
URLData = await API.graphql(graphqlOperation(getURLinfofromMyNum, myNum: 5 ));
我的问题是,我想简单地查询这个表来知道myNum
的最大数量是多少。所以在这张图片中它会返回myNum = 12
。我如何查询我的表来得到这个?
【问题讨论】:
【参考方案1】:DynamoDb 没有与 SQL 表达式 select MAX(myNum)
等效的功能,因此您无法按原样执行您所要求的操作。
一些建议:
在向表中插入项目时记录myNum
的最大值。例如,您可以使用 PK = "METADATA" 和名为 maxMyNum
的属性创建一个项目。如果您的值高于存储在 DDB 中的值,则可以有条件地更新 maxMyNum
属性。
您可以在单个分区中使用myNum
作为排序键来构建二级索引。这将允许您执行 query
操作并将 ScanIndexForward
设置为 false(降序),并选择第一个返回的条目(最大值)
如果您在应用程序代码中生成自动递增值,请考虑查看有关 atomic counters 的文档。
【讨论】:
感谢赛斯的建议。使用 GraphqQL API 调用 DynamoDB 的 AWS Amplify 似乎无法使用 ScanIndexForward、LastEvaluatedKey 或分页,因此我必须使用其他更基本的选项。我目前每次添加新行时都会保留一个单独的计数器,将 myNum 增加 +1。这给了我表中真正的最大行数。当条目被删除时,这显然会减少这个数字。但是,我决定保留多余的条目,并在实际使用数据时设置一个标志来忽略它们。以上是关于如何获取 DynamoDB 列中的最大数量?的主要内容,如果未能解决你的问题,请参考以下文章
如何获取列中元素的 id 和数量,即使它们在 SQL 中为 0