我需要从 DynamoDB 中的用户表中获取用户 ID?
Posted
技术标签:
【中文标题】我需要从 DynamoDB 中的用户表中获取用户 ID?【英文标题】:I need to get the user id from my users table in DynamoDB? 【发布时间】:2020-07-01 20:22:32 【问题描述】:我在我的 react 本机应用程序上使用 AWS Amplify
我想做一些看似如此简单的事情,但我对如何做有点迷茫:我有一个表格,里面已经有用户信息。这是架构:
type Users @model
id: ID!
userName: String
firstname: String
weblink: String
email: String
mobileNum: String
.
.
.
//Here's my Query.js
export const getUsers = `query GetUsers($id: ID!)
getUsers(id: $id)
id
userName
firstname
weblink
email
.
.
.
`;
当我检查我的 AWS 控制台时,此表会填充到 DynamoDB 中。我需要的是能够使用用户名从表中获取 id(反之亦然)。 id 是在我 createUser() 时生成的,它在我的整个应用程序中用于获取我的所有用户信息。但是,当用户在新手机上登录时,此 ID 不再可用。因此,当他们通过 Cognito 登录时,我确实知道用户名,我需要做的就是检索此 ID。
通常我会这样做,但显然我想做相反的事情并使用我唯一的用户名来获取 id:
const userData = await API.graphql(graphqlOperation(GetUsers, id: usersId )); //usersId = "3b0dae-24j5-4401-95a6-11seyhaf1g131"
知道如何获取我的用户 ID 吗?
【问题讨论】:
【参考方案1】:假设userName
是唯一的,创建一个Global Secondary Index 并以userName
作为分区键。 Project,至少,id
属性进入索引。最后,搜索该索引而不是基础表。
或者,如果您从不需要通过id
进行查找,请考虑将userName
设置为分区键并将id
设置为常规属性。
【讨论】:
如何创建或设置用户名作为 GSI?我不需要创建一个全新的表吗? 这个过程非常简单并且有据可查。 AWS 控制台也很有帮助。您只需创建一个 GSI,指明其分区键,并指明要投影的属性。然后将您的查询从本机表更改为 table/gsi(如何执行取决于您使用的 SDK,但通常您指定 TableName 和 IndexName)。以上是关于我需要从 DynamoDB 中的用户表中获取用户 ID?的主要内容,如果未能解决你的问题,请参考以下文章