【问题标题】:Get total results for revisions (RavenDB Client API)获取修订的总结果(RavenDB 客户端 API)
【发布时间】:2020-09-01 18:26:10
【问题描述】:

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

对于常见的文档查询,可以使用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);
}

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

【问题讨论】:

    标签: ravendb


    【解决方案1】:

    你是对的,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, 0, int.MaxValue);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多