gpt4 book ai didi

javascript - 在使用 AWS.DynamoDB.DocumentClient 更新第二个表之前,如何使用事务检查一个表中是否存在某个项目?

转载 作者:行者123 更新时间:2023-12-01 01:02:02 24 4
gpt4 key购买 nike

我是 DynamoDB 新手。我有一个名为“kids-profiles”的 DynamoDB 表,其中列出了用户的子配置文件(主分区键“userId”、主排序键“childId”)。我有第二个表,名为“kids-tasks”,其中列出了子项的任务(主分区键“childId”,主排序键“taskId”)。仅当“childId”存在于“kids-profiles”表中时,我才想以原子方式将项目添加到“kids-tasks”表中。

我尝试使用 AWS.DynamoDB.DocumentClient 类 ( https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html ) 的 transactWrite 方法来实现此目的,但我无法让它工作。首先,当我尝试将 ConditionCheck 添加到 TransactionItems 时,它显示“TransactItems 只能包含检查、放置、更新或删除之一”。因此,我将“ConditionCheck”更改为“Check”,假设这是正确的,即使文档中没有提及。其次,当我执行它时,它会将任务添加到“kids-tasks”表中,无论“childId”是否存在于“kids-profiles”表中。

    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");
}

最佳答案

将对象划分为单独的操作。

 const params = {
TransactItems: [
{
ConditionCheck: {
...
},
+ }, // <------ !!!!!
+ {
Put: {
...
}
]
};

关于javascript - 在使用 AWS.DynamoDB.DocumentClient 更新第二个表之前,如何使用事务检查一个表中是否存在某个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55977351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com