Ошибка: предоставленный ключевой элемент не соответствует схеме - PullRequest
0 голосов
/ 13 мая 2019

Мне нужно получить несколько элементов из Dynamodb, используя лямбду с node.js.Я использую метод batchGet AWS.DynamoDB.DocumentClient ().Я получаю ошибку ниже.

{
    "errorMessage": "The provided key element does not match the schema",
    "errorType": "ValidationException",
    "stackTrace": [
        "Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:48:27)",
        "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)",
        "Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)",
        "Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)",
        "Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)",
        "AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)",
        "/var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10",
        "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)",
        "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)",
        "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)"
    ]
}

Ниже приведен мой код.

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient();
const params = {
  RequestItems: {
    "usersTable_Test": {
      Keys: [{
        userId: '123'}
      ],
      ProjectionExpression: "userId"
    }
  }
};
const res = await docClient.batchGet(params).promise();

Я также пробовал метод batchGetItem, но затем получаю ошибку ниже.

{
    "errorMessage": "docClient.batchGetItem is not a function",
    "errorType": "TypeError",
    "stackTrace": [
        "exports.handler (/var/task/index.js:62:30)",
        "<anonymous>",
        "process._tickDomainCallback (internal/process/next_tick.js:228:7)"
    ]
}

1 Ответ

0 голосов
/ 14 мая 2019

Поскольку вы используете ключ сортировки, вам придется включить его и в свои параметры. Если вы создадите базу данных без настройки ключа сортировки, вам понадобится только первичный ключ. ProjectExpression также не требуется в этом случае. Документация для batchGet (): https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#batchGet-property

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient();
const params = {
  RequestItems: {
    "usersTable_Test": {
      Keys: [
        {
          userId: '123',
          refId: 'theRefId'
        }
      ]
    }
  }
};
const res = await docClient.batchGet(params).promise();

Если вы хотите получать данные только по первичному ключу, вы можете использовать метод query(). https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#query-property

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient();
var params = {
  TableName: 'usersTable_Test',
  KeyConditionExpression: 'userId = :i',
  ExpressionAttributeValues: {
    ':i': '123'
  }
};

docClient.query(params).promise();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...