如果不存在,则追加或创建StringSet

时间:2016-08-18 03:48:00

标签: amazon-web-services amazon-dynamodb aws-lambda

所以这应该很简单......

我希望将一个字符串附加到DynamoDB中的StringSet(如果存在),或者创建StringSet属性(如果不存在)并设置该值。如果我们可以在创建时使用空数组初始化StringSet,那就没问题了,但是我们做不到。

这是我到目前为止所拥有的:

const companiesTable = 'companies';

dynamodb.updateItem({
  TableName: companiesTable,
  Key: {
    id: {
      S: company.id
    }
  },
  UpdateExpression: 'ADD socialAccounts = list_append(socialAccount, :socialAccountId)',
  ExpressionAttributeValues: {
      ':socialAccountId': {
        'S': [socialAccountId]
      }
  },
  ReturnValues: "ALL_NEW"
}, function(err, companyData) {
  if (err) return cb({ error: true, message: err });

  const response = {
    error: false,
    message: 'Social account created',
    socialAccountData
  };

  cb(response);
});

我也试过......

  UpdateExpression: 'SET socialAccounts = list_append(socialAccounts, :socialAccountId)',
  ExpressionAttributeValues: {
    ':socialAccountId': {
      S: socialAccountId
    }
  },

和...

  UpdateExpression: 'ADD socialAccounts = :socialAccountId',
  ExpressionAttributeValues: {
    ':socialAccountId': {
      S: socialAccountId
    }
  },

和...

  UpdateExpression: 'SET socialAccounts = [:socialAccountId]',
  ExpressionAttributeValues: {
    ':socialAccountId': socialAccountId
  },

和...

  UpdateExpression: 'ADD socialAccounts = :socialAccountId',
  ExpressionAttributeValues: {
    ':socialAccountId': socialAccountId
  },

在上述的所有其他变体中。我笨吗? DynamoDB不能简单地写入/更新数组类型字段吗?在尝试添加或设置该字段之前,我是否真的必须首先查找该项以查看它是否具有该字段,因为我无法使用空数组实例化该字段?

1 个答案:

答案 0 :(得分:2)

ADD操作处理创建/更新逻辑,但仅支持数字和集合。您正在尝试添加字符串类型' S'。您需要将此字符串包装在一个数组中,并将其作为字符串集' SS'传递。你也不需要等号 您的UpdateExpression和ExpressionAttributeValues应如下所示:

 UpdateExpression: 'ADD socialAccounts :socialAccountId',
 ExpressionAttributeValues: {
   ':socialAccountId': {
      'SS': [socialAccountId]
    }
 },

有关更新项目的更多信息,请访问here