gpt4 book ai didi

arrays - DynamoDB : UpdateExpression for updating arrays

转载 作者:太空宇宙 更新时间:2023-11-03 23:17:56 25 4
gpt4 key购买 nike

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

问题:当我将项目的属性设置为数组时,它被保存为字符串。我期望 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. 在创建参数时将 data.users 包装在数组中(适用于第一个 id,但添加的第二个 id 会附加到与第一个 id 相同的字符串,因此它看起来像 ['123,456'] 而不是 ['123' ,'456']。

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

  2. 使用“L”和“S”数据类型来确定它是一个字符串数组,即

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

最佳答案

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

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

尝试

":users": data.users

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

关于arrays - DynamoDB : UpdateExpression for updating arrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53045900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com