大佬教程收集整理的这篇文章主要介绍了使用 AWS NodeJS Lambda 在 AWS dynamoDB 中读取过滤数据,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想从 DynamoDB 获取元素到我的 NodeJs AWS Lambda。我想通过“所有者”列选择但不起作用。我为“ID”列尝试了相同的语法,结果正常。在dynamoDB 中添加索引?在哪里?
'use Strict';
var AWS = require('aws-sdk');
var documentClIEnt = new AWs.DynamoDB.documentClIEnt({'region': 'eu-West-1'});
exports.handler = function(event,context,callBACk) {
console.log(JsON.Stringify(event));
const claims = event.requestContext.authorizer.claims;
const username = claims['cognito:username'];
var params = {
tablename : "tp-exam",Key: {
owner: username
}
};
documentClIEnt.get(params,function(err,data){
if (err) {
console.log("Error",err);
const errResponse = {
statusCode: 500,headers: {
"Access-Control-Allow-Origin": "*"
},body: JsON.Stringify({ Error: 500,device : "DynamoDB"})
};
callBACk(null,errResponsE);
} else {
console.log("success",data.Item);
const response = {
statusCode: 200,body: JsON.Stringify(data.Item)
};
callBACk(null,responsE);
}
});
};
@H_301_7@我的错误是:
ValIDationException: The provIDed key element does not match the scheR_192_11845@a
at request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/Json.Js:52:27)
at request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.Js:106:20)
at request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.Js:78:10)
at request.emit (/var/runtime/node_modules/aws-sdk/lib/request.Js:688:14)
at request.Transition (/var/runtime/node_modules/aws-sdk/lib/request.Js:22:10)
at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.Js:14:12)
at /var/runtime/node_modules/aws-sdk/lib/state_machine.Js:26:10
at request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.Js:38:9)
at request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.Js:690:12)
at request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.Js:116:18) {
code: 'ValIDationException',time: 2021-03-01T21:46:40.263Z,requestID: 'C7UHG8354A92SGP2T4FRRFU4GFVV4KQNSO5AEMVJF66Q9ASUAAJG',statusCode: 400,retryable: false,retryDelay: 32.73628085995177
}
我们需要一个 Global Secondary Index 来获取或查询备用键。
要使用 GSI 进行查询,我们需要使用查询 api。
let docClient = new AWs.DynamoDB.DocumentClient();
documentClient.query(
{
Tablename: "tp-exam",IndexName: "owner-index",KeyConditionExpression: "#owner_attr = :ownerVal",ExpressionAttributeValues: {
":ownerVal": "John",},ExpressionAttributenames: {
"#owner_attr": "owner",function (err,data) {
console.log("err",err,"data",data);
}
);
owner
是保留关键字,因此需要使用 ExpressAttributenames 替换为实际属性。
此错误表示您没有为 DynamoDb#get 操作提供正确的主键。
一些提示:
owner
?如果这些问题都不能解决您的问题,请发布您的 DynamoDB 表的详细信息,以便我们了解您的键是如何定义的。
或者,如果 owner
属性不是主键的一部分,并且您想按该字段进行搜索,您有几个选择。
请注意,第一个选项(创建 GSI)是首选方法。
以上是大佬教程为你收集整理的使用 AWS NodeJS Lambda 在 AWS dynamoDB 中读取过滤数据全部内容,希望文章能够帮你解决使用 AWS NodeJS Lambda 在 AWS dynamoDB 中读取过滤数据所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。