Я пытаюсь узнать, существует ли элемент в базе данных 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.info(err, err.stack); // an error occurred
alert("This group doesnt exist.")
}else{
// successful response console.info(data);
if (data.Items[0] == "undefined"){
console.info("ITS WORKING");
}
}
К сожалению, я уже пробовал это. Однако, как указал jarmod, я использовал Items вместо просто Item. Возможно, это была моя проблема. length возвращался как undefined.



Ответ getItem не включает Items, он включает Item (см. документация). Он вернет один элемент, если есть элемент с данным ключом или нет элемента.
Вы можете обнаружить это следующим образом:
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.info(err, err.stack);
} else if (data.Item) {
console.info(JSON.stringify(data));
} else {
console.info('Success, but no item');
}
});
Небольшое замечание: теперь, когда у нас есть var и let, нет особых причин использовать const.
Две вещи, чтобы добавить:
Item для GetItem, Items для Query.
Также в документации AWS упоминается ResourceNotFoundException «для операции, которая пыталась получить доступ к несуществующей таблице или индексу». Чтобы избежать путаницы:
undefined на предмете
data.Items.length === 0не будет работать здесь?