1. ホーム
  2. node.js

[解決済み] NodeJsのDynamoDB putitem - オブジェクトの配列

2022-02-08 23:17:59

質問

AWS LambdaからDynamoDBへの小さなAPIをセットアップしようとしているのですが、オブジェクトの配列をキーに書き込むことができるかどうか、どのようにできるかがわからずに困っています。

のようなオブジェクトを持っています。

{
    "teamName": "Team Awesome",
    "members": [
        {
            "email": "[email protected]",
            "name": "Bob"
        },
        {
            "email": "[email protected]",
            "name": "Alice"
        }
    ]
} 

ドキュメントを見ると、リストタイプを考慮して実行できるように見えますが、どのように実行するかの例がなく、それを試す方法がなくなってきています。

では、この形式で何かを書くことは全く不可能なのでしょうか?その場合、どのようにするのでしょうか?

コード例 - に何を入れればいいのか?

var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB();

exports.handler = function(event, context) {
    var tableName = "GDCCompetition";
    var datetime = new Date().getTime().toString();

    DynamoDB.putItem({
        "TableName": tableName,
        "Item": {
            "datetime": {
                "N": datetime
            },
            "teamName": {
                "S": event.teamName
            },
            "members": ???
        }
    });
}

解決方法は?

ドキュメントにはあまり書かれていないのですが、「Submit」というものがあります。 DocClient このオブジェクトに通常のJSオブジェクトを渡すと、すべてのパースとAWSオブジェクトへの変換(すべての型を含む)を行ってくれます。このように使うことができます。

var AWS = require("aws-sdk");
var DynamoDB = new AWS.DynamoDB.DocumentClient();

var params = {
    TableName: "MyTable",
    Item: {
        "teamName": "Team Awesome",
        "members": [
            {
                "email": "[email protected]",
                "name": "Bob"
            },
            {
                "email": "[email protected]",
                "name": "Alice"
            }
         ]
    } 
};

DynamoDB.put(params, function (err) {
     if (err) {
         return throw err;
     }

     //this is put
});