您实际上并不需要第 1 步来获得第 2 步。我假设这score
是您设置中的排序键。
在第 2 步中,您想要对项目进行排序abs(targetScore - score)
并取j
最低的项目。
尽管 DynamoDB 没有任何直接的方法可以做到这一点,但绝对值的定义使它很容易做到。首先,观察`abs(targetScore - score)的定义如下:它是:
targetScore - score
如果score <= targetScore
score - targetScore
如果score >= targetsScore
因此,abs 最小的项目要么是得分高于targetScore
但尽可能低的项目,要么是得分低于targetScore
但尽可能高的项目。
因此,您可以执行两个单独的 DynamoDB 查询:
- 用查询第一个
j
项目score >= targetScore
,按递增 score
排序。
- 查询带有 的第一
j
项score < targetScore
,按降序 score
排列。
DynanoDB 可以有效且廉价地为您执行这两种查询 - 它涉及Query
带有KeyConditions
参数的 a 和 a Limit
,并ScanIndexForward
进行递减排序。但没有昂贵和低效FilterExpression
!
一旦你拥有了j
每个类型 1 和类型 2 的最小项目,剩下的就是从我们得到j
的这些项目中选择整体最小的项目。2*j