Env: сервис NodeJS, использующий aws-sdk для взаимодействия с DynamoDb.
Проблема: когда я устанавливаю атрибут элемента в массив, он сохраняется как строка. Я ожидаю x: ['1'], но я получаю x: '1'. Я считаю, что это потому, что я неправильно пишу мои UpdateExpression / ExpressionAttributeValues.
Ситуация: у меня есть таблица с полем под названием «пользователи». Users - это массив UUID, которые могут быть обновлены. Пример элемента в таблице:
{ x_name: 'Hello',
owner: '123456',
x_uuid: '1357911',
users: []
}
Я хочу обновить массив пользователей с помощью пользовательского uuid. К моей функции обновления я перехожу через:
{ users: ['13245395'] }
Функция обновления (данные: {пользователи: ['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 в массиве при создании параметров (работает для первого идентификатора, но второй добавленный идентификатор добавляется к той же строке, что и первый, так что он выглядит как ['123,456'] вместо ['123', '456' ].
UpdateExpression: "set users = :users",
ExpressionAttributeValues:{
":users": [`${data.users`]
},
2) Использование типов данных "L" и "S", чтобы определить, что это массив строк, т.е.
UpdateExpression: "set users = :users",
ExpressionAttributeValues:{
":users": { "L": { "S":`${data.users}` } }
},