如何通过RavenDB Client API获取文档修订总结果数(免额外请求)
解决RavenDB修订分页无需额外请求获取TotalResults的问题
嘿,我完全懂你的困扰——为了做修订记录的分页,你现在不得不额外发一次请求去拿TotalResults,但明明第一次获取分页数据的请求里已经包含这个值了,就是不知道怎么直接取到对吧?
其实问题出在session.Advanced.Revisions.GetForAsync<T>这个高层方法上:它只返回了修订数据的列表,把底层响应里的TotalResults给隐藏了。我们可以绕开这个高层方法,直接用底层的命令来发起请求,这样就能一次性拿到分页数据和总条数,不用多跑一次请求。
优化后的解决方案
直接使用GetRevisionsCommand来执行请求,同时获取分页数据和TotalResults:
// 构造获取指定分页修订的命令,最后一个参数设为true,表示需要返回TotalResults var getRevisionsCommand = new GetRevisionsCommand( id, start: (pageNumber - 1) * pageSize, pageSize: pageSize, includeTotalResults: true ); // 执行命令 session.Advanced.RequestExecutor.Execute(getRevisionsCommand, session.Advanced.Context); // 从命令结果中提取分页的修订数据 List<T> items = getRevisionsCommand.Result.Results .Select(result => result.ToObject<T>()) .ToList(); // 直接从结果的父对象中获取TotalResults,无需额外请求 double totalResults = getRevisionsCommand.Result.Results.Parent.GetValue<double>("TotalResults");
为什么这个方案可行?
当你把includeTotalResults设为true时,RavenDB的API响应里会直接包含TotalResults字段,而command.Result.Results.Parent就是承载这个字段的父级JSON对象。我们可以直接通过GetValue方法读取这个值,完全不需要再发起第二次请求。
这样既保留了分页逻辑,又省去了额外的网络开销,比你原来的方案高效多了。
内容的提问来源于stack exchange,提问作者tobi.at
相关产品推荐
相关产品推荐

