首页 > 解决方案 > 如何在 DynamoDB 中使用 GSI 将投影属性附加到查询结果中?

问题描述

我在 DynamoDB 中有下表,它表示多对多关系。

PK sk message_text external_user_id
mes_id_1 信息 一些讯息
mes_id_2 信息 另一条消息
user_notify_id_1 mes_id_1 ext_id_1
user_notify_id_1 mes_id_2 ext_id_1
user_notify_id_2 mes_id_2 ext_id_2

在这种情况下,一条消息可以有很多用户,而一个用户可以有很多消息。我创建了一个 GSI,调用user-pk-index了一个分区键external_user_id和一个排序键,pk并在“全部”上使用了投影属性

我有一个节点项目,我正在使用AWS.DynamoDB.DocumentClient(). 我正在尝试使用external_user_id将返回user_notification数据和message数据的查询。

我期待这样的事情:

Items:[ 
{
  "sk": "mes_id_1",
  "external_user_id": "ext_id_1",
  "pk": "user_notify_id_1",
  "project_attr": {
      "message_text": "Some message"
    }
},
{
  "sk": "mes_id_2",
  "external_user_id": "ext_id_1",
  "pk": "user_notify_id_1",
  "project_attr": {
      "message_text": "another message"
    }
}
]

我正在尝试使用此代码:

let params = {
    TableName: tableName,
    IndexName: "user-pk-index",
    KeyConditionExpression: "external_user_id = :external_user_id",
    ExpressionAttributeValues: {
      :external_user_id": "ext_id_1"
    }
};
dynamodb.query(params, (err, data) => { handleFunction(err, data) });

上面的代码确实返回了对应的两行,ext_id_1但它没有附加到message_text(见下文)

如何将投影属性附加到上面的结果而不是下面的结果?

Items:[ 
{
  "sk": "mes_id_1",
  "external_user_id": "ext_id_1",
  "pk": "user_notify_id_1"
},
{
  "sk": "mes_id_2",
  "external_user_id": "ext_id_1",
  "pk": "user_notify_id_1"
}
]

标签: amazon-web-servicesamazon-dynamodbdynamodb-queriesdocumentclient

解决方案


推荐阅读