iam*_*tis 5 node.js amazon-dynamodb
我有一个 dynamoDB 表,它有一个包含 UserId 和列表列表的项目。它看起来像这样:
Item:
{
UserId: 'abc123',
Lists: [
{
id: 1,
title: 'My favorite movies',
topMovies: [
{
id: 1,
title: 'Caddyshack'
},
{
id: 2,
title: 'Star Wars'
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
现在,让用户创建一个名为“我最喜欢的电视节目”的新列表,并希望将其插入到 id 为 2 的 Lists 数组中。
我将如何使用文档客户端更新此对象。我查看了几个示例,但没有发现任何可以解释我正在尝试做的事情。这让我觉得我可能没有正确使用 DynamoDB,我应该有一个不同的对象架构。
我尝试使用它,但它覆盖了我以前的对象。
exports.handler = (event, context, callback) => {
console.log(event);
const params = {
TableName: "top-ten",
Key: {
"UserId": 'abc123',
},
UpdateExpression: "set Lists =:newItem",
ExpressionAttributeValues: {
":newItem": {
"id": 2,
"title": "Favorite TV Shows",
"topMovies": [{"id": 1, "title" : "The Simpsons"}]
},
},
ReturnValues: "UPDATED_NEW"
};
dynamodb.update(params, function(err, data) {
if (err) {
console.log(err);
callback(err);
} else {
console.log(data);
callback(null, data);
}
});
Run Code Online (Sandbox Code Playgroud)
};
编辑:好的,我发现如果我把
UpdateExpression: "set Lists[1] =:newItem"
Run Code Online (Sandbox Code Playgroud)
它正确更新项目。但是现在,我怎么知道我的列表数组中有多少项?
您应该使用list_append。该函数将两个列表添加到一起,因此您需要使您的项目添加一个列表。
exports.handler = (event, context, callback) => {
console.log(event);
const params = {
TableName: "top-ten",
Key: {
"UserId": 'abc123',
},
UpdateExpression : "SET #attrName = list_append(#attrName, :attrValue)",
ExpressionAttributeNames : {
"#attrName" : "Lists"
},
ExpressionAttributeValues : {
":attrValue" : [{
"id": 2,
"title": "Favorite TV Shows",
"topMovies": [{"id": 1, "title" : "The Simpsons"}]
}]
},
ReturnValues: "UPDATED_NEW"
};
dynamodb.update(params, function(err, data) {
if (err) {
console.log(err);
callback(err);
} else {
console.log(data);
callback(null, data);
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4662 次 |
最近记录: |