函数"/>
更新(添加)dynamodb与lambda函数
我已经做了很多的研究和主题不具有像我这样的后辈足够的来源。所有我能找到的是特定的情况下这是使其无法理解。因此,对于我自己和谁就会在未来的阅读,我不会让我的问题太时的具体的人。
我创建了一个表记录上DynamoDB用下面的lambda函数:
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({region: 'us-east-2', apiVersion: '2012-08-10'})
exports.handler = (event, context, callback) => {
console.log(event)
const params = {
Item: {
"UserId": {
S: "global"
},
"search": {
SS: [
"" + event.hashtag
]
}
},
TableName: "crypto-app"
};
dynamodb.putItem(params, function(err, data) {
if (err) {
callback(err)
} else {
callback(null, data)
}
});
};
这是创建一个简单的字符串集
{
"search": {
"SS": [
"london"
]
},
"UserId": {
"S": "global"
}
}
我怎么可以添加多个字符串我的字符串lambda函数设置,使其像这样?
{
"search": {
"SS": [
"london", "tokyo", "moskow"
]
},
"UserId": {
"S": "global"
}
}
回答如下:
您可以更新的项目,并添加额外的字符串设定值。
这里是你会怎么做,如果你有一个名为xxx
属性,而不是search
,这是一个reserved word。
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
,这是保留的,你需要使用expression attribute name,这是你在表达式中使用,来替代实际的属性名称的占位符基本上逃脱保留名称。
下面是如何做到这一点的例子:
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);
}
});
更多推荐
更新(添加)dynamodb与lambda函数
发布评论