使用DynamoDB Document Client v3向字符串集合添加元素报错求助
解决DynamoDB Document Client v3向字符串集合(SS)添加值的报错问题
你遇到的报错Only Number Set (NS), Binary Set (BS), or String Set (SS) are allowed.,核心原因是使用了原生JavaScript的Set对象——DynamoDB Document Client v3无法将原生Set正确识别并序列化为DynamoDB的集合类型,必须改用SDK提供的专用集合类型。
解决步骤:
- 从
@aws-sdk/util-dynamodb导入StringSet类型(对应DynamoDB的SS类型) - 将
ExpressionAttributeValues中的原生Set替换为StringSet实例
修改后的代码示例:
import * as dynamodb from '@aws-sdk/client-dynamodb'; import * as dynamodblib from '@aws-sdk/lib-dynamodb'; import { StringSet } from "@aws-sdk/util-dynamodb"; const client = new dynamodb.DynamoDBClient({ region: this.props.region }); const ddbDocClient = dynamodblib.DynamoDBDocument.from(client); // 构造更新参数时使用StringSet替代原生Set const input = { TableName: 'movie', Key: { id: '1' }, UpdateExpression: 'ADD #groups :groups', ExpressionAttributeNames: { '#groups': 'groups' }, ExpressionAttributeValues: { ':groups': new StringSet(["new-group-item"]) }, ReturnValues: 'ALL_NEW', ReturnConsumedCapacity: 'NONE' }; const command = new dynamodblib.UpdateCommand(input); const output = await ddbDocClient.send(command);
补充说明:
StringSet是SDK为DynamoDB字符串集合定制的类型,Document Client会自动将其序列化为DynamoDB的SS格式- 如需添加多个值,直接向
StringSet构造函数传入包含多个字符串的数组即可,例如new StringSet(["item3", "item4"])
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

