问题描述
我正在尝试在分页列表中显示文档修订。仅当我知道总结果数时,此方法才起作用,这样我就可以计算页面数。
对于常见文档查询,可以使用session.Query(...).Statistics(out var stats)
。
我当前的解决方法如下:
// get paged revisions
List<T> items = await session.Advanced.Revisions.GetForAsync<T>(id,(pageNumber - 1) * pageSize,pageSize);
double totalResults = items.Count;
// get total results in case items count equals page size
if (pageSize <= items.Count || pageNumber > 1)
{
GetRevisionsCommand command = new GetRevisionsCommand(id,1,true);
session.Advanced.RequestExecutor.Execute(command,session.Advanced.Context);
command.Result.Results.Parent.TryGet("TotalResults",out totalResults);
}
此方法的问题是,我需要一个额外的请求才能获取TotalResults
属性,该属性确实已经由第一个请求返回。我只是不知道如何访问它。
解决方法
您是正确的TotalResults
是从服务器返回的,但未在客户端解析。
我打开一个问题来解决此问题:https://issues.hibernatingrhinos.com/issue/RavenDB-15552
您还可以使用/databases/{dbName}/revisions/count?id={docId}
端点(例如客户端代码)来获取文档的总修订计数:
var docId = "company/1";
var dbName = store.Database;
var json = await store.GetRequestExecutor().HttpClient
.GetAsync(store.Urls.First() + $"/databases/{dbName}/revisions/count?id={docId}").Result.Content.ReadAsStringAsync();
using var ctx = JsonOperationContext.ShortTermSingleUse();
using var obj = ctx.ReadForMemory(json,"revision-count");
obj.TryGet("RevisionsCount",out long revisionsCount);
另一种方式可能是获取所有修订版本:
var revisions = await session.Advanced.Revisions.GetForAsync<Company>(docId,int.MaxValue);
然后使用revisions.Count
作为总数。