获取修订的总结果(RavenDB 客户端 API)

tob*_*.at 5 ravendb

我正在尝试在分页列表中显示文档修订。这仅在我知道总结果数时才有效,以便我可以计算页数。

对于常见的文档查询,这可以通过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, 0, 1, true);
  session.Advanced.RequestExecutor.Execute(command, session.Advanced.Context);
  command.Result.Results.Parent.TryGet("TotalResults", out totalResults);
}
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是我需要一个额外的请求来获取第一个请求TotalResults确实已经返回的属性。我只是不知道如何访问它。

小智 5

您是对的TotalResults,从服务器返回但未在客户端解析。我打开了一个问题来解决这个问题:https : //issues.hibernaterhinos.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);
Run Code Online (Sandbox Code Playgroud)

另一种方法可能是获取所有修订:

var revisions = await session.Advanced.Revisions.GetForAsync<Company>(docId, 0, int.MaxValue);
Run Code Online (Sandbox Code Playgroud)

然后使用revisions.Count作为总计数。