使用c#,代码就像这样
DynamoDBContext context = new DynamoDBContext(client, new DynamoDBContextConfig() { TableNamePrefix = "lalala" });
QueryFilter filter = new QueryFilter();
filter.AddCondition("Userid", QueryOperator.Equal, "hashkeyvalue");
QueryOperationConfig queryConfig = new QueryOperationConfig
{
Filter = filter,
Select = SelectValues.AllProjectedAttributes,
Limit = 1,
IndexName = "Userid-UpdatedAtTimestamp-index"
};
try
{
var result = await context.FromQueryAsync<IAPRecord>(queryConfig).GetRemainingAsync();
int ccc = result.Count;
}
catch (Exception ex)
{
throw new ArgumentException(ex.Message + ex.InnerException);
}
和ccc应为1但现在它等于整个集合,好像Limit = 1不存在。
需要帮助!!
答案 0 :(得分:1)
解决。
var query = context.FromQueryAsync<IAPRecord>(queryConfig);
var result = await query.GetNextSetAsync();
int ccc = result.Count;
显然GetRemainingAsync将获得所有结果,无论您在查询中设置了limit参数的数量。 相反,我们应该使用GetNextSetAsync。
答案 1 :(得分:0)
我遇到了类似的问题,发现这篇文章很有用。我将方法QueryAsync与全局二级索引一起使用。我找不到在可用的过载中限制结果的方法。通过更改为FromQueryAsync方法,我可以限制结果并避免lambda超时。我认为通过命名这两种方法之间的区别并不清楚,但是FromQueryAsync具有重载功能,可让您同时提供QueryOperationConfig和DynamoDBOperationConfig。第一个用于限制,第二个用于指定GSI或覆盖表名。