DynamoDB Appsync 查询多个属性

Posted

技术标签:

【中文标题】DynamoDB Appsync 查询多个属性【英文标题】:DynamoDB Appsync Query on multiple attributes 【发布时间】:2021-12-27 05:19:45 【问题描述】:

我的应用使用 AppSync 解析器从 DDB 获取数据并将其返回到我们的前端。我们有一张表用于通知。通知可以是挂起的或默认的(非挂起的)。表本身有一个主键 notification_id,我们有一个名为 userIndex 的 GSI 来获取用户的通知,排序键是时间戳

在应用程序中,我将所有通知显示在一个列表中,首先是待处理的,然后是默认的。鉴于用户可能有很多通知,我想实现分页以一次获取一批。我能够做到这一点的唯一方法是

    更改查询以包含 isPending 参数,我将其用作查询的过滤表达式,以仅返回 isPending 或 isNotPending 的通知。 存储两个“nextTokens”,每个 isPending 和 isNotPending 一个,以及相应的列表。 对待处理/非待处理进行单独查询,并使用过滤器返回到相应的列表。

这显然效率低下,我正在从 DynamoDB 重新读取数据。我的问题是,鉴于我的 DynamoDB 表/要求,有没有一种方法可以分页,以便我可以先获取所有待处理通知(按时间戳排序),然后使用一个查询获取所有默认通知(按时间戳排序)和一个nextToken

我见过@model@key 的用法,但我无法在我的应用程序中使用它。

谢谢!

【问题讨论】:

【参考方案1】:

不,不是真的。 Dynamodb 查询的返回值有一个硬性限制——这是无法绕过的。使用nextToken 的唯一方法是另一个查询。

然而,同样值得注意的是,FilterExpression发生在数据已经被检索后并且被过滤客户端。它不会减少从查询中提取的文档 - 只有显示的内容。因此,对于每个查询,下一个标记仍然(相对)相同。您可以在调用之后在下一个分页查询之前自己过滤它,并在多次调用方面为自己节省一点。

【讨论】:

以上是关于DynamoDB Appsync 查询多个属性的主要内容,如果未能解决你的问题,请参考以下文章

AppSync 中的 DynamoDB ReturnValues UPDATED_OLD

具有“自定义类型”属性的DynamoDB表的Graphql Mutation查询

使用 AWS Appsync 和 GraphQL 查询 Dynamo DB 中的多个表

哪些情况会导致 AppSync 无法从 DynamoDB 表中返回所有匹配的记录/项目?

AWS AppSync:如何通过 DynamoDB 返回有效的 JSON

AWS AppSync GraphQL - 如何使用 PK/SK 查询而不是扫描整个 dynamoDB 表以获取 graphql 列表 API