Env:aws-sdk
用于与 DynamoDb 交互的 NodeJS 服务。
问题:当我将一个项目的属性设置为一个数组时,它被保存为一个字符串。我期望 x: ['1'] 但我得到 x: '1'。我相信这是因为我写错了我的 UpdateExpression/ExpressionAttributeValues。
情况:我有一个表,其中有一个名为users
. 用户是一个uuids
可以更新的数组。表中项目的示例:
{ x_name: 'Hello',
owner: '123456',
x_uuid: '1357911',
users: []
}
我想用 user 更新 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']
}
以前试过:
在创建参数时将 data.users 包装在一个数组中(适用于第一个 id,但添加的第二个 id 被附加到与第一个相同的字符串中,因此它看起来像 ['123,456'] 而不是 ['123', '456']。
UpdateExpression: "set users = :users", ExpressionAttributeValues:{ ":users": [
${data.users}
] },使用“L”和“S”数据类型来确定它是一个字符串数组,即
UpdateExpression: "set users = :users", ExpressionAttributeValues:{ ":users": { "L": { "S":
${data.users}
} } },