2017-08-26 72 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存儲數據的方式,因爲當我們查看數據時,我們應該能夠知道該字段的數據類型,該數據類型與關係數據庫中列的數據類型非常相似。雖然數據在dynamoDB中像這樣存儲和顯示,但是當我們通過實際應用程序或API從dynamoDB獲取數據時,我們可以擺脫數據類型,這將只返回實際數據。

+0

謝謝。但是,當我在Dynamo數據庫控制檯中創建記錄或特別使用諸如firstName:John之類的屬性作爲輸入參數的一部分時,數據類型不會顯示在控制檯中,這是因爲put命令現在知道數據類型之前。問題是,對於沒有定義模式的輸入對象,如何編寫put命令以便每個項目都是db中的單獨屬性? – user9445

+0

對不起,遲到了,真的很忙:)。在REST世界中,客戶端和服務之間總是會有一個關於數據外觀的協議。如果您打算公開您的服務,那麼理想情況下您應該爲您的客戶提供他們應該發送的數據。請查看以下鏈接獲取示例API文檔 https://bocoup.com/blog/documenting-your-api –

+0

感謝您的鏈接。沒有意識到我從未感謝你。遲到比我猜想的晚! – user9445

相關問題