【问题标题】:How to query for all posts by followed users in AWS AppSync如何在 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 解析器/架构来完成此任务。

【问题讨论】:

    标签: aws-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/…
    猜你喜欢
    • 2012-03-10
    • 2023-01-15
    • 2022-01-11
    • 2023-04-05
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多