【问题标题】:Query attempt using Node.js dynamoDB document client is not working使用 Node.js dynamoDB 文档客户端的查询尝试不起作用
【发布时间】:2018-04-11 05:29:14
【问题描述】:

我正在尝试编写一个 lambda 函数,该函数从名为 simul-MOCK_LEADS_TBL 的 dynamodb 表中检索数据。我想出了以下 nodejs 代码来实现这一点:

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-west-2'}); 

exports.handler = (event, context, callback) => {
    // TODO implement
var table = "simul-MOCK_LEADS_TBL";
var lead_email = "hwdnpny@xyz.com";
  var params = {
    TableName: table,
    Key:{
        "lead_email": lead_email
    }
};
  docClient.get(params, function(err, data) {
    if(err) { 
      callback(err, null);
    } else { 
      callback(null, data.Items); 
    }
  });
}

最终目标是基本上根据将在事件键中传递的电子邮件来查询表。但是,我不断收到以下错误:

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

Request ID:
"7d76c52a-3c61-11e8-b415-093987d0d3bc"

Function Logs:
START RequestId: 7d76c52a-3c61-11e8-b415-093987d0d3bc Version: $LATEST
2018-04-10T01:50:05.834Z    7d76c52a-3c61-11e8-b415-093987d0d3bc    {"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)"]}
END RequestId: 7d76c52a-3c61-11e8-b415-093987d0d3bc
REPORT RequestId: 7d76c52a-3c61-11e8-b415-093987d0d3bc  Duration: 215.36 ms Billed Duration: 300 ms     Memory Size: 512 MB Max Memory Used: 37 MB  

我检查了多个文档和网站,它们都遵循相同的代码来执行此操作,但是我不确定为什么它不适合我:

资源

https://rishabh.io/misc/dynamodb-with-nodejs.html https://medium.com/quick-code/node-js-restful-api-with-dynamodb-local-7e342a934a24

注意:--- 表格详细信息----

Table name  simul-MOCK_LEADS_TBL
Primary partition key   lead_email (String)
Primary sort key    lead_id (String)
Point-in-time recovery  DISABLEDEnable
Encryption  DISABLED
Time to live attribute  DISABLEDManage TTL
Table status    Active
Creation date   April 6, 2018 at 12:19:00 PM UTC-7
UTC: April 6, 2018 at 7:19:00 PM UTC

Local: April 6, 2018 at 12:19:00 PM UTC-7

Region (Oregon): April 6, 2018 at 11:19:00 AM UTC-8

Provisioned read capacity units 5 (Auto Scaling Enabled)
Provisioned write capacity units    5 (Auto Scaling Enabled)
Last decrease time  -
Last increase time  -
Storage size (in bytes) 34.22 KB
Item count  107
Region  US West (Oregon) 

【问题讨论】:

    标签: node.js aws-lambda amazon-dynamodb aws-sdk


    【解决方案1】:

    看起来您的表有一个主排序键。所以GetItem函数需要在参数中同时传递partition keysort key

    var params = {
    TableName: table,
    Key:{
        "lead_email": lead_email,
        "lead_id": some_lead_id
    }
    

    【讨论】:

    • 感谢您的回答,我确实尝试过,即使该复合主键有一个条目,它也会返回 null。无论如何,通过对以下参数使用查询来解决它: var params = { TableName: table, KeyConditionExpression: "#lead_email = :lead_email", ExpressionAttributeNames:{ "#lead_email": "lead_email" }, ExpressionAttributeValues: { ":lead_email":领导电子邮件} };
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 2015-04-18
    • 2020-01-22
    • 2017-11-22
    • 2020-02-27
    • 1970-01-01
    相关资源
    最近更新 更多