当前位置: 首页 > 知识库问答 >
问题:

无法分析DynamoDB扫描操作的结果

潘阳舒
2023-03-14

我有一个带有NodeJS 10.x的AWS Lambda。这个Lambda试图扫描基于“FilterExpression”的DynamoDB表。我正在使用DocumentClient执行“扫描”操作。尽管使用了各种方法,但我无法读取和迭代结果对象。

我尝试使用以下方法:(1)var flatData=AWS.DynamoDB.Converter。解组(itemdata);(2) var flatData=AWS.DynamoDB.Converter。输出({“M”:itemdata});(3) var flatData=AWS.DynamoDB.Converter。输出({“M”:itemdata}) (1)和(3)工作,即当我控制台时。记录我得到的平面数据:{origin:undefined,status\u history:undefined,r\u id:undefined,external\u注意:undefined,…}

DynamoDB表有3条我正在使用的FilterExpression的匹配记录。NodeJS代码也迭代了3次,但使用如上所述的值。

所有这些键都有值。我想知道如何获取我们上面看到的键的值。我尝试了JSON. stringify()、JSON. parse(),但没有任何运气。顺便说一句,我正在为我的Lambda:exports.handler=函数(事件、上下文、回调){...


共有2个答案

何向荣
2023-03-14

我犯了一个非常基本的错误,因为我在尝试各种选择。我所要做的就是:

data.Items.forEach(function(itemdata) {
.....
itemdata.status_history 
itemdata.r_id
翁建弼
2023-03-14

您不需要将其转换为普通的javascript对象,因为响应将在普通的javascript对象中。我不喜欢使用扫描操作,因为它会消耗更多的RCU。进行查询操作。

TLDR:

扫描的输出响应如下(AWS Dynamo Link)

 {
   "ConsumedCapacity": { 
      "CapacityUnits": number,
      "GlobalSecondaryIndexes": { 
         "string" : { 
            "CapacityUnits": number,
            "ReadCapacityUnits": number,
            "WriteCapacityUnits": number
         }
      },
      "LocalSecondaryIndexes": { 
         "string" : { 
            "CapacityUnits": number,
            "ReadCapacityUnits": number,
            "WriteCapacityUnits": number
         }
      },
      "ReadCapacityUnits": number,
      "Table": { 
         "CapacityUnits": number,
         "ReadCapacityUnits": number,
         "WriteCapacityUnits": number
      },
      "TableName": "string",
      "WriteCapacityUnits": number
   },
   "Count": number,
   "Items": [ 
      {
        // **Your Data Will Be Here**
      } 
   ],
   "LastEvaluatedKey": { 
      "string" : { 
         "B": blob,
         "BOOL": boolean,
         "BS": [ blob ],
         "L": [ 
            "AttributeValue"
         ],
         "M": { 
            "string" : "AttributeValue"
         },
         "N": "string",
         "NS": [ "string" ],
         "NULL": boolean,
         "S": "string",
         "SS": [ "string" ]
      }
   },
   "ScannedCount": number
}

预期的DB获取结果将在“Items”数组中。并且输出将不是Dynamodb JSON格式。因此,不需要使用他们的工具解析数据。

 类似资料:
  • 例如,如果我有一个活动表,它的排序键是一个日期字段(updatedAt),并且它有一百万行。如果我执行一个限制为10的扫描(为了得到最近的10个活动),我显然会得到10行,但我会因为读取100万行而被收费吗?成本是我主要关心的问题。

  • 我是AWS DynamoDB的新手,阅读了留档后,我不能100%确定在SCAN操作中使用“限制”参数时成本计算会发生什么。 我知道应该设计表,以便主要使用查询操作,并且扫描将扫描整个表,从而消耗大量的读取容量。我还知道FilterExpression不会影响扫描整个表的成本,但会过滤整个扫描后返回的内容,如果扫描的项目总数超过1 MB的最大数据集大小限制,则会停止扫描并返回结果。 我不确定的是,“

  • 正如使用boto3完全扫描dynamoDb中所解释的,我构建了一个解决方案,使用某些条件完全扫描dynamoDb表。这是我的代码: 但是当代码被执行时,它会进入一个无限循环。这是LastEvaluatedKey每次迭代的输出: 它一直在这两对之间循环。 编辑: 我添加了do_scan方法。

  • 我正在尝试使用Java aws sdk版本1.11.140使用限制为1的DynamoDBScanExpression 即使我使用. with Limit(1)即。 返回所有条目的列表,即7。我做错什么了吗? P. S.我尝试使用cli进行查询 返回我只有1个结果。

  • 我们有一个设置,其中各种工作节点执行计算并更新DynamoDB表中的相对状态。该表充当工作节点活动的一种历史记录。看门狗节点需要定期扫描表,并构建一个表示工作节点及其作业的当前状态的对象。因此,我们的应用程序能够扫描表并按时间顺序检索数据(即按时间戳排序)是很重要的。表最终会太大,无法扫描到本地内存进行后期排序,所以我们扫描后无法排序。 从AWS留档读取主键: DynamoDB使用分区键值作为内部

  • 我正在尝试使用contains FilterExpression从AWS Dynamo DB scan获取数据。我正在使用以下参数,但收到的响应为空: {“Items”:[],“Count”:0,“ScannedCount”:792,“LastEvaluatedKey”:{“ID”:“b123456789”} 我想根据数组中的字符串进行过滤,例如:orange from fruits:['oran