2017-08-26 19 views
0

私は以下のコードを使用してdynamodbにjsonオブジェクトを格納しようとしています。Lambda + Nodejs + dynamodb:jsonを格納する理由:データ型を格納するアイテムを置くのはなぜですか?

exports.handler = function (event, context, callback) { 

    var docClient = new AWS.DynamoDB.DocumentClient(); 

    var table = "Logs"; 

    id_val = 1 
    var params = { 
     TableName: table, 
     Item: { 
      "id": id_val, 
      "message": event 
     } 
    }; 

    docClient.put(params, function(err, data) { 
     if (err) { 
      callback(null, JSON.stringify(err, null, 2)); 
      context.fail("Unable to add item. Error JSON:", JSON.stringify(err, null, 2)); 
     } 
    }); 
} 

イベントへの入力

[ 
    { 
     "id": 1, 
     "demographic": { 
      "firstName": "John", 
      "middleName": "w", 
      "lastName": "Doe", 
      "suffix": "jr", 
      "birthDate": "1990-02-02", 
      "gender": "M", 
      "ssn": 123 
     } 
    } 
] 

テーブルに保存されている何

{ 
    "id": { 
     "N": "84.20420287568176" 
    }, 
    "message": { 
     "L": [ 
      { 
       "M": { 
        "demographic": { 
         "M": { 
          "birthDate": { 
           "S": "1990-02-02"  
     ... 
     ... 
     ... 

なぜデータ型がテーブルに格納されていますか?属性を別々に保存するには、どうすればこの問題を解決できますか?

答えて

1

これはdynamoDBがデータを格納する方法です。データを見ると、フィールドのデータ型を知ることができるはずです。これは、データベースの列のデータ型と同じです。実際のアプリケーションやAPIを使ってdynamoDBからデータを取得すると、データはdynamoDBに格納されて表示されますが、実際のデータのみを返すデータ型は取り除くことができます。

+0

ありがとうございます。しかし、ダイナモdbコンソールのレコードを作成したり、入力パラメータの一部としてfirstName:Johnなどの属性を使用してレコードを作成すると、データ型がコンソールに表示されず、putコマンドでデータ型が認識されるようになります手前に。質問は、定義されたスキーマを持たない入力オブジェクトに対して、各項目がdb内の別の属性であるようにputコマンドを書く方法は? – user9445

+0

申し訳ありませんが、遅い応答のために、本当に忙しかった:)。 RESTの世界では、クライアントとサービスの間に、データの見た目には常に合意があります。あなたがあなたのサービスを公開することを計画しているなら、理想的にはあなたのクライアントに送るべきデータを提供するべきです。サンプルAPIドキュメントについては、下のリンクをご確認ください https://bocoup.com/blog/documenting-your-api –

+0

リンクをありがとうございます。私は決してあなたに感謝したことを知らなかった。私が推測するよりもずっと遅くなりました! – user9445

関連する問題