Запрос работает на консоли, но не в коде - PullRequest
4 голосов
/ 02 июля 2019

Моя таблица DynamoDB alexas имеет этот элемент с ключом "abc", как показано на консоли DynamoDB ниже:

enter image description here

Однако, следующеезапрос не возвращает результата:

const params = { TableName: "alexas",
  KeyConditionExpression: "deviceId = :deviceId",
  ExpressionAttributeValues: { ":deviceId": "abc"}
}
const docClient = new AWS.DynamoDB.DocumentClient();
docClient.query(params, (err, data) => {
  if (err) {
    console.error(err);
  } else {
    console.log(data);
  }
});

Приведенный выше код возвращает null для err и data:

{ Items: [], Count: 0, ScannedCount: 0 }

Я новичок в стиле выражений DynamoDB.Что-то не так с моим кодом, который я взял с здесь .

Если вместо query я использовал метод scan и просто TableName в params,Я получаю предметы в моем столе.Это подтверждает, что я выполняю операции с правильной таблицей, в которой есть данные.

Ответы [ 3 ]

3 голосов
/ 05 июля 2019

Запрос не дал данных, поскольку значение ключа не совпадает.

Элемент deviceId представляет собой строку "abc", а не abc.Обратите внимание на дополнительные кавычки.

Элемент был вставлен с помощью редактора создания консоли DynamoDB, и нет необходимости включать "", если ожидается, что значение уже имеет тип string.

0 голосов
/ 04 июля 2019

Чек QueryAPI

const params = { TableName: "alexas",
  KeyConditionExpression: "deviceId = :deviceId",
  ExpressionAttributeValues: {
     ":devideId":{
       S: "abc", // here
     }
  }
}
const docClient = new AWS.DynamoDB.DocumentClient();
docClient.query(params, (err, data) => {
  if (err) {
    console.error(err);
  } else {
    console.log(data);
  }
});

ExpressionAttributeValues необходимо передать другим способом.

Обновление: Попробуйте использовать имена атрибутов Exp, (я не уверен, что это изменит)

var params = {
     TableName: "alexas",
     KeyConditionExpression: "#d = :dId",
     ExpressionAttributeNames:{
          "#d": "email"
     },
     ExpressionAttributeValues: {
           ":dId": "abc"
     }
};
0 голосов
/ 02 июля 2019

Операция DynamoDB Scan не принимает KeyConditionExpression - только операция Query принимает этот параметр.Scan всегда сканирует всю таблицу и имеет FilterExpression для пост-фильтрации этих результатов (однако учтите, что вы все равно платите за сканирование всей таблицы).

Например, вот официальная документация Scan: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html

...