You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lambda查询DynamoDB无返回结果的参数配置问题排查

问题原因

你遇到的查询无返回的问题是由两个核心错误导致的:

  1. 返回字段取值错误
    DynamoDB的query查询接口会返回多条匹配的记录,结果存放在返回对象的data.Items(复数,数组类型)属性中,你代码中访问的data.Item是单数属性,该属性不存在,所以输出为undefined。如果确认只会返回一条记录,可以取data.Items[0],如果有多条符合条件的记录,遍历data.Items数组即可。
  2. 查询逻辑判断错误
    你当前的错误回调仅会在查询请求本身执行失败时触发(如参数非法、权限不足、服务异常等),如果查询正常执行但没有匹配到记录,会正常进入成功回调,仅data.Items为空数组,不会走到你写的No records found逻辑分支。
  3. (可选优化项)别名使用不规范
    你在ExpressionAttributeNames中已经声明了#LN为Lname的别名,但KeyConditionExpression直接使用了原始字段名Lname,虽然此处没有触发保留字冲突不会报错,但规范写法应该统一使用别名,避免后续字段名碰到DynamoDB保留字时出现异常。

修复后的代码示例

查询参数调整(可选优化)

params = {             
    TableName: "Customers",    
    IndexName: "LastNameIndex",    
    ExpressionAttributeNames: {
        "#FN": "Fname",         
        "#LN": "Lname",
        "#DB": "Dob"           
    },     
    ExpressionAttributeValues: {
        ":a": {
            S: "Connors"
        }     
    },     
    KeyConditionExpression: "#LN = :a", // 改用统一别名
    ProjectionExpression: "#FN, #LN, #DB"
};

查询执行代码调整

ddb.query(params).promise().then(
    function(data) {
        // 从Items数组取匹配结果
        if (data.Items.length > 0) {
            console.log("Customer:", data.Items)
            // 仅需要第一条记录的话取 data.Items[0]
            return data.Items;
        } else {
            console.log("No records found...")
            return [];
        }
    },
    function(err) {
        // 仅处理请求执行类错误
        console.error("查询请求执行失败:", err)
    });

内容的提问来源于stack exchange,提问作者DavidC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:54:00