Amazon dynamodb 使用FilterExpression(contains)的aws sdk dynamodb扫描操作将生成空项

Amazon dynamodb 使用FilterExpression(contains)的aws sdk dynamodb扫描操作将生成空项,amazon-dynamodb,aws-sdk-nodejs,amazon-dynamodb-streams,Amazon Dynamodb,Aws Sdk Nodejs,Amazon Dynamodb Streams,我正在尝试使用contains FilterExpression从AWS Dynamo DB scan获取数据。我正在使用以下参数,但接收空响应作为: {“Items”:[],“Count”:0,“ScannedCount”:792,“LastEvaluatedKey”:{“ID”:“b123456789”} 我想根据数组中的字符串进行过滤,例如:orange from fruits:['orange','apple','banana'] 扫描操作参数: 参数={ TableName:table

我正在尝试使用contains FilterExpression从AWS Dynamo DB scan获取数据。我正在使用以下参数,但接收空响应作为

{“Items”:[],“Count”:0,“ScannedCount”:792,“LastEvaluatedKey”:{“ID”:“b123456789”}

我想根据数组中的字符串进行过滤,例如:orange from fruits:['orange','apple','banana']

扫描操作参数:

参数={ TableName:table, 过滤器表达式:“包含(水果,:L)”, 表达式属性值:{:L:{S:“橙色”} }

但是,当我使用AWS CLI的as命令时,我将以以下格式获取数据:

{“项目”:[{“水果”:{“L”:[{“S”:“橙色”}]}},{}]}


您能告诉我我使用的参数有什么问题吗。

要了解这里发生了什么,您需要了解DynamoDB如何过滤数据和分页结果。它的发生顺序如下:

  • 从表中读取项目
  • 应用过滤器
  • 返回结果
  • DynamoDB
    query
    scan
    操作一次最多返回1MB的数据。超过1MB的任何数据都将被分页。如果DynamoDB在响应中返回
    LastEvaluatedKey
    元素,您就知道结果正在分页

    过滤器在1MB限制后应用。这是经常让人措手不及的关键步骤。在您的情况下,会发生以下情况:

  • 执行一个
    scan
    操作,从表中读取1MB的数据
  • 您对1MB响应应用了一个过滤器,这将导致从响应中删除第一步中的所有记录
  • DDB返回带有
    LastEvaluatedKey
    元素的剩余项,这表示有更多数据要搜索

  • 换句话说,您的筛选器没有应用于整个表。它一次应用于1MB的表。为了获得您要查找的结果,您需要重复执行
    扫描
    操作,直到到达最后一页“在表中。

    你好,赛斯,但我没有收到1MB系列中的任何项目。我不确定我是否理解您面临的问题。你最初的问题说你得到的结果是空的,但后来说你得到的结果格式不同。你能澄清你面临的问题吗?查看您正在执行的代码或CLI命令会很有帮助。