gpt4 book ai didi

node.js - 仅当主排序键不同时 NodeJS lambda dynamoDB putItem

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:14 25 4
gpt4 key购买 nike

我正在开发一个 lambda 函数,它将存储有关不同用户的信息。我有一个属性,userID 作为我的主分区键,storedObject 作为我的主排序键。当我使用 PutItem 时,我希望它仅添加 StoreObject 属性中尚不存在的项目。

这是我的代码

    var params = {
TableName: 'TrackItDB',
Item: {
'userID' : {S: currentUser},
'storedObject' : {S: itemName},
'lenderPerson' : {S: personName},
'objectStatus' : {S: 'lent'},
'transactionDate': {S: date},
}
};
....
const checkIfItemIsStoredParams = {
Key: {
"userID" : {
S: currentUser
},
"storedObject" : {
S: itemName
}
},
TableName: "TrackItDB"
};
.....
dynamodb.getItem(checkIfItemIsStoredParams, function(err, data) {

if (!data) {
// no match, add the item
console.log('Item did not exist, storing to DB');
console.log(params);
return dynamodb.putItem(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});
}
else {
console.log('Get item succeeded', data);
}
}
});

我遇到的问题是,即使没有数据,它总是将 Get Item successed 输出到控制台。我已经尝试了 if (data) 和 if (!data),即使没有返回数据,也都返回获取项目成功。

最佳答案

getItem 即使没有找到您要查找的项目,也会返回一个数组。因此,您的条件语句将始终为真,因为您正在检查数据是否为空/未定义。您应该检查数据的长度:

if (!data.length) { // item doesn't exit
// put new item
}

另一种解决方案是通过对 DynamoDB 进行一次调用(而不是两次)来简化您尝试执行的操作。如果您担心性能或 AWS 使用成本,这可能是个好主意。 putItem 具有参数 ConditionExpression,它允许您根据您指定的条件对应更新的项目进行细粒度控制。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html

对于您的情况,它可能看起来像这样:

var params = {
TableName: 'TrackItDB',
Item: {
'userID' : {S: currentUser},
'storedObject' : {S: itemName},
'lenderPerson' : {S: personName},
'objectStatus' : {S: 'lent'},
'transactionDate': {S: date},
},
ConditionExpression: 'attribute_not_exists(storedObject)'
};

dynamodb.putItem(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});

关于node.js - 仅当主排序键不同时 NodeJS lambda dynamoDB putItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53107332/

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