我是DynamoDB的新手。我有一个名为“ kids-profiles”的DynamoDB表,该表列出了用户的子配置文件(主分区键“ userId”,主排序键“ childId”)。我还有第二个表称为“ kids-tasks”,该表列出了一个子任务(主分区键“ childId”,主排序键“ taskId”)。我想仅在“儿童配置文件”表中存在“ childId”的情况下,才将原子项添加到“儿童任务”表中。
我正在尝试使用AWS.DynamoDB.DocumentClient类(https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html)的transactWrite方法来实现此目的,但是我无法使其工作。首先,当我尝试将ConditionCheck添加到TransactionItems时,它说“ TransactItems只能包含Check,Put,Update或Delete中的一个”。因此,我将“ ConditionCheck”更改为“ Check”,即使这在文档中未提及,也假定这是正确的。其次,当我执行它时,无论“ kids-profiles”表中是否存在“ childId”,它都会将任务添加到“ kids-tasks”表中。
const params = {
TransactItems: [
{
Check: {
TableName: "kids-profiles",
Key: {
userId: userId,
childId: childId,
},
ConditionExpression: "attribute_exists(childId)",
},
Put: {
TableName: "kids-tasks",
Item: {
childId: childId,
taskId: uuid.v1(),
title: title,
}
}
}
]
};
try
{
await dynamoDb.transactWrite(params).promise();
console.log("Success!");
}
catch (error)
{
console.log("Error");
}
答案 0 :(得分:0)
将对象划分为单独的操作。
const params = {
TransactItems: [
{
ConditionCheck: {
...
},
+ }, // <------ !!!!!
+ {
Put: {
...
}
]
};