我有一个关于如何在RavenDB上实现“select * from xxx where ...”的相同行为的问题,因为会返回大量文档(已设置索引)。
我听说默认行为是Take(128),对吧?但我想要的是像TakeAll(),因为我不知道实际的数字。如何正确实现?
我能想到的是使用Skip()和Take()直到结束。但这对于这样一个简单的要求来说看起来真的很乏味。此外,它可能超过单个会话的请求数量限制,这是我想知道如何优雅克服的另一个障碍。
非常感谢:)
答案 0 :(得分:5)
答案 1 :(得分:1)
Dodd,虽然我同意@Daniel认为选择所有不是最佳做法,但你仍然可以拥有一个很好的用例。
此技术无效,因为MaxPageSize
仍然是上限(正如@Ayende在下面的评论中所述。
您可以执行两个简单的查询来获取数据,而不是在循环迭代中设置 MaxPageSize
或调用Take()
。
第一个查询将用于确定 HOW MANY 记录的存在。请注意Take(0)
不会返回任何结果,但会填充统计信息。
RavenQueryStatistics stats = null;
var tempPagingQuery = (from p in session.Query<Page>
.Statistics(out stats)
select p).Take(0).FirstOrDefault();
第二个查询将获取所有记录。在这里,我们使用上面收集的 statistics 中的TotalResults
。
pages = (from p in session.Query<Page>
select p).Take(stats.TotalResults).ToList();
击> <击> 撞击>