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

扫描DynamoDB表时ProjectionExpression指定的colors列无返回结果

为什么DynamoDB Scan操作只返回userId而不返回colors?

先看你的返回结果:

{ Items: [ { userId: 'amzn1.ask.account.XYZ' } ], Count: 1, ScannedCount: 2 }

这个结果说明,匹配你过滤条件的那条数据本身就没有colors字段——DynamoDB是无模式的NoSQL数据库,每个条目可以拥有不同的属性,如果你指定的ProjectionExpression里的字段在目标条目中不存在,它就不会出现在返回结果里。

接下来你可以按这几步排查:

  1. 先确认目标条目是否真的包含colors字段
    暂时去掉ProjectionExpression,执行一次完整的Scan,看看这条数据的完整结构:

    var docClient = new AWS.DynamoDB.DocumentClient();
    var params = {
      "TableName": "myTable",
      "ExpressionAttributeValues": {":val": userId},
      "FilterExpression": "userId = :val"
    };
    console.log("Scanning full table entries.");
    docClient.scan(params, function(err, data){
      if (err) console.log(err, err.stack);
      else console.log(data.Items); // 这里会输出完整的条目,检查是否有colors字段
    });
    

    如果输出里还是没有colors,那就是这条数据写入的时候就没加这个字段,得去检查数据写入的逻辑。

  2. 检查字段名的拼写和大小写
    DynamoDB的属性名是大小写敏感的,如果你表中实际的字段名是Colors(首字母大写),但你在ProjectionExpression里写的是colors,那也会找不到这个字段。确认一下表中的字段名和你代码里的完全一致。

  3. 确认ProjectionExpression的语法是否正确
    你的代码里ProjectionExpression写的是"colors, userId",语法是对的,没有逗号或者空格的问题,所以这部分大概率没问题。

总结一下:最可能的原因就是匹配条件的那条数据里根本不存在colors字段,先通过完整Scan确认这一点,再针对性解决数据写入的问题或者字段名匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:20:14