DynamoDb:UpdateExpression用于更新数组



Env:NodeJS服务,使用aws-sdk与DynamoDb交互。

问题:当我将项的属性设置为数组时,它会保存为字符串。我期望x:['1'],但我得到x:'1'。我认为这是因为我错误地编写了UpdateExpression/ExpressionAttributeValues。

情境:我有一张表,里面有一个名为users的字段。Users是一个可以更新的uuids数组。表中项目的示例:

{ x_name: 'Hello',
owner: '123456',
x_uuid: '1357911',
users: [] 
}

我想用用户uuid更新用户数组。到我的更新功能,我通过:

{ users: ['13245395'] }

更新功能(数据为{ users: ['13245395'] }(:

updateX(data, { x_uuid }) {
if (!x_uuid) {
throw new Error('No x_uuid supplied')
}
// new doc client
const docClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: this.table,
Key: {
'x_uuid': x_uuid
},
UpdateExpression: "set users = :users",
ExpressionAttributeValues:{
":users": `${data.users}`
},
ReturnValues:"ALL_NEW"
};
return new Promise((resolve, reject) =>
docClient.update(params, (error, x) => {
return error ? reject(error) : resolve(x)
})
)
}
}

我得到的结果是

{ x_name: 'Hello',
owner: '123456',
x_uuid: '1357911',
users: '13245395'
}

但我所期望的是:

{ x_name: 'Hello',
owner: '123456',
x_uuid: '1357911',
users: ['13245395']
}

以前尝试过:

  1. 在创建params时将data.users包装在数组中(适用于第一个id,但添加的第二个id会附加到与第一个相同的字符串中,因此看起来像是〔123456’〕,而不是〔12323’,‘456’〕。

    UpdateExpression:";设置用户=:用户";,表达式属性值:{":用户":[${data.users}]},

  2. 使用";L";以及";S〃;确定它是字符串数组的数据类型,即

    UpdateExpression:";设置用户=:用户";,表达式属性值:{":用户":{"L":{"S":${data.users}}},

您正在将用户数组转换为字符串

":users": `${data.users}`

尝试

":users": data.users

这将把users设置为data.users 中的数组

相关内容

  • 没有找到相关文章

最新更新