Вы можете обновить элемент и добавить дополнительные строковые значения.
Вот как вы бы это сделали, если бы назвали атрибут xxx
вместо search
, который является зарезервированным словом .
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({region: 'us-east-2'});
const params = {
Key: {
UserId: {
S: 'global',
},
},
UpdateExpression: 'ADD xxx :avals',
ExpressionAttributeValues: {
':avals': {
SS: ['tokyo', 'moskow'],
},
},
TableName: 'crypto-app',
};
dynamodb.updateItem(params, (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
Однако, поскольку вы назвали атрибут search
, который зарезервирован, вам необходимо по существу экранировать это зарезервированное имя, используя имя атрибута выражения , котороезаполнитель, который вы используете в выражении, в качестве альтернативы фактическому имени атрибута.
Вот пример того, как вы это делаете:
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({region: 'us-east-2'});
const params = {
Key: {
UserId: {
S: 'global',
},
},
UpdateExpression: 'ADD #a :avals',
ExpressionAttributeValues: {
':avals': {
SS: ['tokyo', 'moskow'],
},
},
ExpressionAttributeNames: {
'#a': 'search',
},
TableName: 'crypto-app',
};
dynamodb.updateItem(paramse, (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
Другой, возможно, лучший способ сделать этоэто для использования DynamoDB DocumentClient .Это клиентский интерфейс более высокого уровня, который упрощает работу с элементами, абстрагируя понятие значений атрибутов и вместо этого используя собственные типы JavaScript.
С DocumentClient вместо явной записи UserId: { 'S': 'global' }
вы можете просто использоватьUserId: 'global'
и тип строки ('S'
) будет выведен.
Вот пример обновления элемента с использованием DocumentClient:
const AWS = require('aws-sdk');
const dc = new AWS.DynamoDB.DocumentClient({region: 'us-east-2'});
const params = {
Key: {
UserId: 'global',
},
UpdateExpression: 'ADD #a :avals',
ExpressionAttributeValues: {
':avals': dc.createSet(['tokyo', 'moskow']),
},
ExpressionAttributeNames: {
'#a': 'search',
},
TableName: 'crypto-app',
};
dc.update(params, (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});