如何更新String Set(SS)类型的Dynamodb中的项目?

Jos*_*ose 8 amazon-web-services node.js amazon-dynamodb

我创建了一个String Set类型的属性.当我创建创建项目并分配类型SS的属性时,一切正常.但是当我尝试更新此属性时,数据类型将更改为列表("L").

我试试这个:

qw = new AWS.DynamoDB.DocumentClient();

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

qw.update (etc.)
Run Code Online (Sandbox Code Playgroud)

这会导致dynamodb中数据类型的更改,而不是字符串集我得到一个列表:

"ssvar": {
            "L": [
                {
                    "S": "test"
                }, 
                {
                    "S": "test2"
                }
            ]
        }
Run Code Online (Sandbox Code Playgroud)

我尝试了各种类似的解决方案,但总是我的数据类型发生了变化.

  ExpressionAttributeValues: {
     ":arrp": 
        "SS": [ "test", "test2" ]
  }
Run Code Online (Sandbox Code Playgroud)

如何更新字符串集类型的属性?

Tor*_*rAL 14

截至2015年9月,createSetDocumentClient中有一个可用于此的功能.

更新 - 添加了示例

我已修改您的示例代码以使用此功能:

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.)
Run Code Online (Sandbox Code Playgroud)


Ben*_*rtz 5

这是使用 DocumentClient 的产物 - StringSet 不是 JSON 类型。

DocumentClient 将 StringSet 转换为 Array 原生 JavaScript 类型:https : //github.com/aws/aws-sdk-js/blob/master/lib/dynamodb/converter.js#L61。然后客户端将原生 JavaScript 数组序列化为 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