You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 00:07:34