このクエリは最近まで私のために働いていました。これで、RavenDBに135のInstallationSummaryドキュメントがあります。開始時刻までに最新のものを取得する代わりに、ほとんど機能していますが、最後の2、3、最新のドキュメントはこのクエリから表示されません。間違ったクエリを実行していますか?OrderByDescendingとTakeをRavenDBで実行するために、知っておくべき別の方法はありますか?正しく照会できるものにドキュメント番号の制限はありますか?
注:これをデバッグしましたが、クエリは実際にグリッドに表示されているものを返します。クエリが実行されてから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/ravendb-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句を追加する必要がありました。