如何在 AWS AppSync 中查询关注用户的所有帖子

Posted

技术标签:

【中文标题】如何在 AWS AppSync 中查询关注用户的所有帖子【英文标题】:How to query for all posts by followed users in AWS AppSync 【发布时间】:2019-03-08 03:51:20 【问题描述】:

我有一个使用 DynamoDB 作为后端的 AWS Appsync 应用程序。我有一个帖子表,每个帖子都有一个原始作者的用户名字段。我处于一种情况,我想查询以查看他们关注的作者的所有帖子。

每个用户可以有多个帖子,每个用户可以关注多个用户。

type Post 
    id: ID!
    username: String
    title: String
    content: String


type User
     username: String
     following: [String]

我应该如何构建 DynamoDB 中的表以及 AppSync 中的 AppSync 解析器/架构来完成此任务。

【问题讨论】:

【参考方案1】:
type User 
    username: String! ## Primary key
    posts: [Post]
    following: [Following]

type Following 
    follower: String! ## Primary key
    username: String! ## Sort key
    posts: [Post]

type Post 
    username: String! ## Primary key
    postID: ID! 
    title: String
    content: String

type Query 
    getPostsByUsername(username: String!): User

schema 
    query: Query

User.posts 解析器:


    "version": "2017-02-28",
    "operation": "Query",
    "query": 
        "expression": "username = :username",
        "expressionValues": 
            ":username": $util.dynamodb.toDynamoDBJson($context.source.username)
        
    


$util.toJson($ctx.result.items)

User.following解析器


    "version": "2017-02-28",
    "operation": "Query",
    "query": 
        "expression": "follower = :follower",
        "expressionValues": 
            ":follower": $util.dynamodb.toDynamoDBJson($context.source.username)
        
    


$util.toJson($ctx.result.items)

Following.posts解析器


    "version": "2017-02-28",
    "operation": "Query",
    "query": 
        "expression": "username = :username",
        "expressionValues": 
            ":username": $util.dynamodb.toDynamoDBJson($context.source.username)
        
    


$util.toJson($ctx.result.items)

Query.getPostsByUsername解析器


    "version": "2017-02-28",
    "operation": "GetItem",
    "key": 
        "username": $util.dynamodb.toDynamoDBJson($ctx.args.username),
    


$util.toJson($ctx.result)

测试

用户表

PostTable

下表

现在我们可以通过用户名查询所有帖子以及所有朋友的帖子。希望对您有所帮助:)

【讨论】:

谢谢,但是我怎么才能得到我所有朋友的所有帖子呢?不只是一个用户 你想得到你所有朋友的帖子吗?如果我错了,请纠正我。 1个用户可以有很多帖子和很多关注者? @KoingDev 如何将分页添加到getPostsByUsername(username: String!): User 在哪里创建这些解析器,因为如果我创建 user.following.vtl 解析器,它将不会被读取。 谢谢。我找到了。它在这里提到。 docs.aws.amazon.com/appsync/latest/devguide/…

以上是关于如何在 AWS AppSync 中查询关注用户的所有帖子的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AWS appsync (GraphQL) 禁用自省查询?

AWS Appsync Javascript 查询示例和输入语法

AWS AppSync Lambda 解析器获取查询返回类型

使用 appsync 解析器、aws dymaodb 的嵌套查询

如何通过查询在 AWS AppSync 中的嵌套字段上进行筛选

如何从命令行向 AWS AppSync 发送 GraphQL 查询?