我需要使用带有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)"
]
}
答案 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()