程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 AWS NodeJS Lambda 在 AWS dynamoDB 中读取过滤数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 AWS NodeJS Lambda 在 AWS dynamoDB 中读取过滤数据?

开发过程中遇到使用 AWS NodeJS Lambda 在 AWS dynamoDB 中读取过滤数据的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 AWS NodeJS Lambda 在 AWS dynamoDB 中读取过滤数据的解决方法建议,希望对你解决使用 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 来获取或查询备用键。

使用 AWS NodeJS Lambda 在 AWS dynamoDB 中读取过滤数据

要使用 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 中的主键有两种形式,简单的和复合的。一个简单的主键由一个分区键组成。复合主键由分区键组成。您的错误表明您可能有一个复合主键,但没有指定主键的排序键部分。

如果这些问题都不能解决您的问题,请发布您的 DynamoDB 表的详细信息,以便我们了解您的键是如何定义的。

或者,如果 owner 属性不是主键的一部分,并且您想按该字段进行搜索,您有几个选择。

  1. 使用 owner 作为主键创建一个新的 GSI
  2. 您可以使用 scan 操作按非键属性进行搜索。

请注意,第一个选项(创建 GSI)是首选方法。

大佬总结

以上是大佬教程为你收集整理的使用 AWS NodeJS Lambda 在 AWS dynamoDB 中读取过滤数据全部内容,希望文章能够帮你解决使用 AWS NodeJS Lambda 在 AWS dynamoDB 中读取过滤数据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:使用