Amazon dynamodb AWS AppSync未从DynamoDB返回所有记录

Amazon dynamodb AWS AppSync未从DynamoDB返回所有记录,amazon-dynamodb,Amazon Dynamodb,当使用DynamoDB作为数据源时,我显示了135行样本数据的总记录计数。但是,当我运行listAll查询时,我在屏幕上看到的数据非常随机,仅限于20条记录 当我通过将limit参数设置为150进行调查时,我得到了所有的数据。如果我将限制保持在两个或三个,并尝试添加一个过滤器来查询结果,那么我不会得到任何结果 当我继续检查请求映射模板时,我发现limit的默认值被传递为20。因此,我们随机看到20条记录 "limit": $util.defaultIfNull($ctx.args.limit,

当使用DynamoDB作为数据源时,我显示了135行样本数据的总记录计数。但是,当我运行
listAll
查询时,我在屏幕上看到的数据非常随机,仅限于20条记录

当我通过将
limit
参数设置为150进行调查时,我得到了所有的数据。如果我将限制保持在两个或三个,并尝试添加一个过滤器来查询结果,那么我不会得到任何结果

当我继续检查请求映射模板时,我发现limit的默认值被传递为20。因此,我们随机看到20条记录

"limit": $util.defaultIfNull($ctx.args.limit, 20)
因此,如果您的过滤器具有这二十条记录中任何一条的记录详细信息,您将得到结果。如果DynamoDB中还有其他内容,则不会返回

如果从RequestMappingTemplate中删除此限制属性,则会收到所有数据。但是,任何时候你通过了限制,它都不会被考虑,你会得到所有的结果

我从这个练习中看到,限制与行索引之类的东西直接相关

我这样说的原因是:假设您正在使用过滤器运行查询,并且没有得到任何结果,但是有一个
nextToken
可用。 如果使用此
nextToken
再次查询,限制为2,则如果要查找的记录不属于查询检索的20条记录,则不会再次得到任何结果

换句话说,它似乎首先获取
限制
,然后才应用过滤器

我也在DynamoDB中检查了同样的问题,我在过滤时没有任何这样的问题


有人能帮我吗?我在这里也读过其他类似的文章,但它们没有提到
限制
限制查询池的情况,而不是限制返回结果的数量。

当查询或扫描DynamoDB表时,可以限制返回的项目数量。不过,任何过滤都是在限制之后进行的,这会在找到要查找的项目之前为您提供“无数据”页面,正如您所描述的那样

请注意,尽管可以取消限制,DynamoDB仍将强制执行1MB的最大页面。物品的数量取决于物品的大小。所以除非你总是有谢谢@Ben, 最后,我能够使用GSI post检索结果,更改请求映射模板如下:

{
    "version" : "2017-02-28",
    "operation" : "Query",
    "index" : "brand-index",
    "query" : {
        "expression": "#brand = :brand",
        "expressionNames" : {
            "#brand" : "brand"
        },
        "expressionValues" : {
            ":brand" : $util.dynamodb.toDynamoDBJson($ctx.args.brand)    
        }
    },
    "filter" : {
        "expression" : "contains(#type, :type)",
        "expressionNames" : {
            "#type" : "type"
        },
        "expressionValues" : {
            ":type" : $util.dynamodb.toDynamoDBJson($ctx.args.type)
        }
    }
}
这个问题是由于将Hash误解为评论,并在早些时候删除了它(#brand)。我还注意到,我们不能在过滤器中使用主键,也不能使用排序键

谢谢 沙希德纳瓦兹