检查表项是否不存在。如何检查返回的“ Items”数组是否为空? Javascript / DynamoDB

时间:2019-06-21 15:46:59

标签: arrays amazon-web-services amazon-dynamodb is-empty

我正在尝试查看DynamoDB数据库中是否存在一项。但是我找不到直接的答案。因此,我正在使用getItem()操作。

这将返回一个JSON。在文档中,如果数据库中未找到任何项目,则返回的项目应为空。但是,我似乎无法弄清楚如何检查此返回值是否为空。我尝试了if(data == "undefined"){

的变体
//PutItem - DynamoDB table: check if group exists
                var dynamodb5 = new AWS.DynamoDB({ region: AWS.config.region });
                var identityId = AWS.config.credentials.identityId;
                var params = {
                      Key: {
                       "groupName": {
                         S: groupname
                        }
                      }, 
                      TableName: "group"
                     };
                dynamodb5.getItem(params, function(err, data) {
                if (err){
                    console.log(err, err.stack); // an error occurred
                     alert("This group doesnt exist.")
                }else{
                   // successful response console.log(data); 


                    if(data.Items[0] == "undefined"){
                        console.log("ITS WORKING");
                    }

}

2 个答案:

答案 0 :(得分:0)

getItem响应不包含Items,而是包含Item(请参见documentation)。如果有带有给定键的项目,或者没有任何项目,它将返回一个项目。

您可以按以下方式检测到它:

const AWS = require('aws-sdk');

const ddb = new AWS.DynamoDB({ region: 'us-east-1' });

const params = {
  Key: {
    'groupName': {
      S: groupname,
    },
  },
  TableName: 'group',
};

ddb.getItem(params, (err, data) => {
  if (err) {
    console.log(err, err.stack);
  } else if (data.Item) {
    console.log(JSON.stringify(data));
  } else {
    console.log('Success, but no item');
  }
});

次要注意事项:由于我们有varlet,因此几乎没有理由使用const

答案 1 :(得分:0)

补充两点:

Item 用于 GetItem,Items 用于 Query。

AWS 文档还提到 ResourceNotFoundException“用于尝试访问不存在的表或索引的操作”。为了避免混淆:

  • 获取一个不存在的项目将在该项目上返回 undefined
  • 尝试从不存在的表或不存在的索引中获取某些内容会导致该错误。例如,您错误地输入了表名或主索引。