首页 > 解决方案 > 具有多个条件的 Dynamodb filterExpression 不起作用

问题描述

dynamodb在nodejs中有一个查询如下。I have a matching record但它没有返回任何值。有什么想法可以解决这个问题吗?

const docClient = new AWS.DynamoDB.DocumentClient({ region: "ap-south-1" });
var userParams = {
        TableName: "aa-users",
        FilterExpression: '#email = :emailval AND #postProfileOTP = :otpval',
        ExpressionAttributeNames: {
              "#email": "email",
              "#postProfileOTP": "postProfileOTP"
          },
        ExpressionAttributeValues: {
            ":emailval": email,
            ":otpval": otp
        }
    };
    docClient.scan(userParams, function (err, data) {
         console.log(data.Count) // not getting the result count
         if(data.Count > 0){
          res.status(200).json({ "status": 1, "data": data.Items })
         }
    })

相反,我收到如下错误:

发出 (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:78:10)", " 在 Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:683: 14)", "在 Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)", "在 AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/ lib/state_machine.js:14:12)", " 在 /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10", " 在请求。(/var/task/node_modules/aws-sdk/lib/request.js:38:9)", " 在请求。(/var/task/node_modules/aws-sdk/lib/request.js:685:12)" ] } (/var/task/node_modules/aws-sdk/lib/request.js:38:9)", " 在请求。(/var/task/node_modules/aws-sdk/lib/request.js:685:12)" ] } (/var/task/node_modules/aws-sdk/lib/request.js:38:9)", " 在请求。(/var/task/node_modules/aws-sdk/lib/request.js:685:12)" ] }

标签: javascriptnode.jsamazon-web-servicesaws-lambdaamazon-dynamodb

解决方案


看起来 AWS 返回的是错误而不是结果/数据。当您收到一个回调,其第一个参数为“err”参数时,您应始终检查是否未设置此参数,然后再继续。例如:

if (err) {
   console.error(err)
   // recover in some way, or kill process
   process.exit(1)
}

通过这样做,从 AWS 返回的错误将被记录到控制台,您将更好地了解发生了什么问题。


推荐阅读