如何在 .NET 的 DynamoDB 中限制来自 context.Query 的结果数量

How do I limit the number of results from context.Query in DynamoDB in .NET

我正在尝试限制 return 在查询 table 时由 DynamoDB 编辑的项目数。我只需要第一个匹配结果。

目标是减少消耗的读取单元数,并努力保持代码的可读性我正在使用 context.Query 查询二级本地索引并获得第一个匹配结果。

这是当前查询:

context.Query<TableEntry>(matchId, new DynamoDBOperationConfig { IndexName = "SecondaryId-index" })

这将 return 所有 SecondaryId-index 匹配 matchId 的项目,但我只想要它匹配的第一个项目。

所以我尝试了这个:

context.Query<TableEntry>(matchId, new DynamoDBOperationConfig { IndexName = "SecondaryId-index" }).First()

据我所知,context.Query(即使它是懒惰的)仍将执行整个查询并至少读取第一页(使用 .First() 进行枚举时)并且该页面将包含多个项目,因此消耗了比所需更多的读取容量单位。

我找不到任何关于如何在 .NET 中仅使用 context.Query 将查询限制为第一个匹配项的文档。

这可能吗?如果没有,下一个最好的选择是什么同时保持代码 minimal/clean?

不,这不可能。数据模型模式非常愚蠢:它提供了一个方便的接口来执行常见操作,而无需编写任何样板,但以性能和控制为代价。

您需要使用 low-level DynamoDbClient。对于需要控制其请求的应用程序,您可能希望删除 DynamoDbContext,而是围绕客户端创建自己的包装器,以公开您需要的任何请求属性。

请记住,DynamoDbContextFromDocumentToDocument 方法仍然有用,这对(反)序列化对象有很大帮助 to/from在客户端 request/responses.

中找到的属性字典