这个查询直到最近才为我工作。现在我的 RavenDB 中有 135 个 InstallationSummary 文档。它不是按开始时间获取最新的,而是主要工作,但是最后一对,最近的文档没有从这个查询中显示出来。我查询不正确吗?有没有我应该注意的不同的方式来使用 RavenDB 进行 OrderByDescending 和 Take?我可以正确查询的文件数量是否有限制?
注意:我已经调试过了,查询确实返回了我们在网格中看到的内容。在查询运行时间和 UI 中显示的时间之间没有进行任何转换。
IEnumerable<InstallationSummary> installationSummaries =
QueryAndCacheEtags(session => session.Advanced.LuceneQuery<InstallationSummary>()
.Include(x => x.ApplicationServerId)
.Include(x => x.ApplicationWithOverrideVariableGroup.ApplicationId)
.Include(x => x.ApplicationWithOverrideVariableGroup.CustomVariableGroupId)
.OrderByDescending(summary => summary.InstallationStart)
.Take(numberToRetrieve)).Cast<InstallationSummary>().ToList();
此网格应在其中显示更多行,开始时间大于 2012 年 1 月 19 日下午 6:33:51:
编辑:我从查询中删除了 Take(numberToRetrieve),我只得到了 160 个 InstallationSummary 文档中的 128 个。我可以在 RavenDB Studio 中看到所有 160 个,但只有 128 个从查询返回。128... 128... 2 的幂... 我达到极限了吗?
好的,看起来我确实达到了 128 的限制:http: //www.blogcoward.com/archive/2010/05/21/RavenDB-and-a-brief-design-philosophy-discussion-with-Ayende.aspx http://codeofrob.com/archive/2010/05/12/ravenb-basic-usage-considerations.aspx
但为什么?我在那里有一个 Take() 方法。我应该如何获得最近的 50 份文件?
作为一个小技巧,下面的查询至少会显示最新的。这不是我想要的,因为我想要最近的 50 个,不管日期如何。只要自开始日期以来不超过 50 个,这至少会显示最近的项目。
using Raven.Client.Linq;
DateTime startDate = new DateTime(2012, 1, 18);
IEnumerable<InstallationSummary> installationSummaries =
QueryAndCacheEtags(session => session.Query<InstallationSummary>()
.Include(x => x.ApplicationServerId)
.Include(x => x.ApplicationWithOverrideVariableGroup.ApplicationId)
.Include(x => x.ApplicationWithOverrideVariableGroup.CustomVariableGroupId)
.Where(x => x.InstallationStart > startDate)
.OrderByDescending(summary => summary.InstallationStart)
.Take(numberToRetrieve)
).Cast<InstallationSummary>().ToList();
我必须从 LuceneQuery 转到 Query 并且必须添加 Where 子句。