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