DynamoDB:如何创建具有嵌套 JSON 结构的表?

2022-09-02 12:36:39

我想在 dynamoDB 中创建一个具有以下结构的表。

{
  "CartId": 123,
  "UserId": 356,
  "CartItems": [
    {
      "ProductId": 100,
      "Quantity": 50
    },
    {
      "ProductId": 121,
      "Quantity": 51
    }
  ]
}

在教程和文档的任何地方,它都说我们只能在表中拥有以下类型的属性:

  1. 字符串集

  2. 数字集

  3. 二进制集

我想不出在 DynamoDB 中存储上述结构的方法。你能帮忙吗?

我正在使用java的对象映射器Api。如果您还可以告诉我如何创建一个可以映射到此特定表结构的类,那就太好了。


答案 1

最简单的方法是使用@DynamoDBDocument

  1. 添加 Maven 依赖项
<dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-dynamodb</artifactId>
        <version>1.11.186</version>
</dependency>
  1. 创建 POJO
@DynamoDBTable(tableName = "Customer")
public class Customer
{ 
    @DynamoDBHashKey
    @DynamoDBAutoGeneratedKey
    private String id;

    private String firstName;

    private List<Foo> fooList;
}

@DynamoDBDocument
public static class Foo {
    private String name;
}
  1. 创建存储库
@EnableScan
public interface CustomerRepository extends CrudRepository<Customer,String>

然后呼叫 .结果将如下所示:customerRepository.save(customer)

{
  "firstName": "Test",
  "fooList": [
    {
      "name": "foo"
    },
    {
      "name": "foo2"
    }
  ],
  "id": "e57dd681-8608-4712-a39a-f3e0f31a5e27"
}

答案 2

派对有点晚了,但想分享这个。我能够通过在我的Java实体中定义列属性来存储深度嵌套的Json Doc,如下所示。

@DynamoDBAttribute
@DynamoDBTypeConvertedJson
private List<Map<String,Object>> pageData;

输入 Json:

 {
    "userId": 359628,
    "platform": "learn-web",
    "inactive_duration": 0,
    "total_time": 15,
    "device_type": "web",
    "page_data": [{
        "page_details": {
            "page_type": "segmentView",
            "time": 15,
            "segment_id": 65590,
            "session_id": 13140,
            "module_id": 4363
        },
        "items": [{
            "type": "component",
            "id": 267307,
            "sub_type": "video",
            "time": 10,
            "metadata": {
                "lastPlaybackRate": 1,
                "currentTime": 0,
                "isLocked": false,
                "video": {
                    "videoType": "BRIGHTCOVE",
                    "viewingTime": 156,
                    "videoSize": 7120441,
                    "url": "5378655747001",
                    "URL": "5378655747001"
                }
            }
        }]
    }]
}

存储在 Dynamo DB-Snap 中