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

时间:2019-05-13 09:16:42

标签: 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.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 :(得分:0)

由于使用的是排序键,因此您还必须将其包括在参数中。如果要创建数据库而没有设置排序键,则只需要主键。在这种情况下,也不需要ProjectExpression。 batchGet()的文档:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#batchGet-property

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" encoding="UTF-8" indent="yes" />

    <xsl:template match="Products[child::Product1][1]/Product1/Reference">
        <xsl:value-of select="." />
    </xsl:template>

    <xsl:template match="text()" />
</xsl:stylesheet>

如果只想通过主键获取数据,则可以使用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(); 方法。 https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#query-property

query()