You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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提供的专用集合类型。

解决步骤:

  1. 从@aws-sdk/util-dynamodb导入StringSet类型(对应DynamoDB的SS类型)
  2. 将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:40:59