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

Ami*_*mit 8 amazon-dynamodb

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

{
    "CartId": 123,
    "UserId": 356,
    "CartItems": [
     {
        "ProductId":100,
        "Quantity": 50
     },
     {
        "ProductId": 121,
        "Quantity": 51
     }
     ]
}
Run Code Online (Sandbox Code Playgroud)

它在教程和文档中的任何地方都表示我们只能在表格中使用以下类型的属性:

  1. 字符串集

  2. 一组数字

  3. 二进制集

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

我正在使用java的对象映射器Api.如果您还可以告诉我如何创建可以映射到此特定表结构的类,那将是很棒的.

sen*_*982 13

最简单的方法是使用 @DynamoDBDocument

  1. 添加Maven依赖项

    <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-dynamodb</artifactId>
            <version>1.11.186</version>
    </dependency>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建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;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建存储库

    @EnableScan
    public interface CustomerRepository extends CrudRepository<Customer,String>
    
    Run Code Online (Sandbox Code Playgroud)

    然后打电话customerRepository.save(customer).结果将是这样的:

    {
      "firstName": "Test",
      "fooList": [
        {
          "name": "foo"
        },
        {
          "name": "foo2"
        }
      ],
      "id": "e57dd681-8608-4712-a39a-f3e0f31a5e27",
     ]
    }
    
    Run Code Online (Sandbox Code Playgroud)


小智 5

参加聚会有点晚了,但想分享一下。我能够通过在我的 Java 实体中定义如下列属性来存储深层嵌套的 Json 文档。

@DynamoDBAttribute
@DynamoDBTypeConvertedJson
private List<Map<String,Object>> pageData;
Run Code Online (Sandbox Code Playgroud)

输入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"
                }
            }
        }]
    }]
}
Run Code Online (Sandbox Code Playgroud)

存储在 Dynamo DB-Snap 中


Che*_*rel 1

您可以将 JSON 作为字符串存储在 Dynamodb 中。这完全取决于您想要对数据执行什么操作以及如何检索数据。

例如,DynamoDB Java API 引入了 Marshaller 对象,可将任何 Java 对象转换为字符串,以便您可以存储它并从 DynamoDB 属性自动获取它。