2016-05-12 67 views
5

我已經創建了一個String Set類型的屬性。 當我創建創建項目並分配類型SS的屬性一切正常。 但是,當我嘗試更新此屬性時,數據類型更改爲列表(「L」)。如何更新String set(SS)類型的Dynamodb中的項目?

我試試這個:

qw = new AWS.DynamoDB.DocumentClient(); 

var params = { 
    TableName : "myTable", 
    Key: { 
    "id": somekey 
    }, 
    UpdateExpression: "set ssvar= :arrp", 
    ExpressionAttributeValues: { 
    ":arrp": [ "test", "test2" ] 
    } 
}; 

qw.update (etc.) 

這就導致了一個變化中的數據類型在dynamodb和串組代替我得到一個列表:

"ssvar": { 
      "L": [ 
       { 
        "S": "test" 
       }, 
       { 
        "S": "test2" 
       } 
      ] 
     } 

我已經嘗試了各種解決方案像下面,但總是我的數據類型被改變。

ExpressionAttributeValues: { 
    ":arrp": 
     "SS": [ "test", "test2" ] 
    } 

如何更新字符串類型的屬性?

+0

我有Golang同樣的問題。一段字符串被轉換爲dynamodbattribute.Marshal上的dynamodb List。我如何將它轉換爲dynamodb Stringset? – Aprimit

回答

1

這是使用DocumentClient的工件 - StringSet不是JSON類型。

DocumentClient將StringSet轉換爲Array原生JavaScript類型: https://github.com/aws/aws-sdk-js/blob/master/lib/dynamodb/converter.js#L61。然後,客戶端將本地JavaScript Array作爲DynamoDB列表類型進行序列化:https://github.com/aws/aws-sdk-js/blob/master/lib/dynamodb/converter.js#L12

如果你想使用StringSet類型,你可以使用低級別的API:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html

5

自2015年9月,是你可以使用這個DocumentClient一個createSet功能。

UPDATE - 添加例如

我已經修改了你的示例代碼使用此功能:

qw = new AWS.DynamoDB.DocumentClient(); 

var params = { 
    TableName : "myTable", 
    Key: { 
    "id": somekey 
    }, 
    UpdateExpression: "set ssvar= :arrp", 
    ExpressionAttributeValues: { 
    ":arrp": qw.createSet([ "test", "test2" ]) 
    } 
}; 

qw.update (etc.) 
+0

儘管此鏈接可能會回答問題,但最好在此處包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – ekad

+0

@ekad謝謝你,小費。用一個例子更新了答案:) – TorAL

+0

正是我需要的! – Julian