Aws lambda 错误:提供的键元素与架构不匹配

Aws lambda 错误:提供的键元素与架构不匹配,aws-lambda,amazon-dynamodb,Aws Lambda,Amazon Dynamodb,我需要使用带有node.js的lambda从dynamodb获取多个项目。我正在使用AWS.DynamoDB.DocumentClient()的batchGet方法。我得到下面的错误 { "errorMessage": "The provided key element does not match the schema", "errorType": "ValidationException", "stackTrace": [ "Request.extra

我需要使用带有node.js的lambda从dynamodb获取多个项目。我正在使用AWS.DynamoDB.DocumentClient()的batchGet方法。我得到下面的错误

{
    "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)"
    ]
}
{
    "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)"
    ]
}

我也尝试过batchGetItem方法,但随后出现以下错误

{
    "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)"
    ]
}
{
    "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)"
    ]
}

{
“errorMessage”:“docClient.batchGetItem不是函数”,
“errorType”:“TypeError”,
“stackTrace”:[
“exports.handler(/var/task/index.js:62:30)”,
"",
“进程._tickDomainCallback(internal/process/next_tick.js:228:7)”
]
}

由于您使用的是排序键,因此也必须将其包含在参数中。如果要创建数据库而不设置排序键,则只需要主键。在这种情况下也不需要ProjectExpression。 batchGet()的文档:

如果只想通过主键获取数据,可以使用
query()
方法。


表上的键是什么?如果
userId
不是主键,则此查询将不起作用。另外,
batchGetItem
仅在从AWS.DynamoDB()中删除
.DocumentClient()
时才起作用,并且该请求的参数语法非常不同。要检查的另一件事是,userId存储为数字还是字符串?如果您将123作为字符串传递,请删除引号(如果db将值存储为数字)。@Dylan I将userId作为主分区键,将refId作为主排序键。两者的数据类型均为字符串。
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();