Właściwy sposób pobierania ponad 128 dokumentów z RavenDB
Wiem, że warianty tego pytania zostały wcześniej zadane (nawet przeze mnie), ale wciąż nie rozumiem nic z tego ...
Zrozumiałem, że można uzyskać więcej dokumentów niż domyślne 128, wykonując następujące czynności:
<code>session.Advanced.MaxNumberOfRequestsPerSession = int.MaxValue; </code>
I dowiedziałem się, że klauzula WHERE powinna być ExpressionTree zamiast Func, więc jest traktowana jako Queryable zamiast Enumerable. Pomyślałem, że to powinno zadziałać:
<code>public static List<T> GetObjectList<T>(Expression<Func<T, bool>> whereClause) { using (IDocumentSession session = GetRavenSession()) { return session.Query<T>().Where(whereClause).ToList(); } } </code>
Zwraca jednak tylko 128 dokumentów. Czemu?
Uwaga: oto kod, który wywołuje powyższą metodę:
<code>RavenDataAccessComponent.GetObjectList<Ccm>(x => x.TimeStamp > lastReadTime); </code>
Jeśli dodam Take (n), mogę uzyskać tyle dokumentów, ile tylko chcę. Na przykład zwraca 200 dokumentów:
<code>return session.Query<T>().Where(whereClause).Take(200).ToList(); </code>
W oparciu o to wszystko wydaje się, że właściwym sposobem pobrania tysięcy dokumentów jest ustawienie MaxNumberOfRequestsPerSession i użycie Take () w zapytaniu. Czy to prawda? Jeśli nie, jakpowinien to zrobić?
W mojej aplikacji muszę pobrać tysiące dokumentów (które zawierają bardzo mało danych). Przechowujemy te dokumenty w pamięci i wykorzystujemy jako źródło danych dla wykresów.
** EDYTOWAĆ **
Próbowałem użyć int.MaxValue w moim Take ():
<code>return session.Query<T>().Where(whereClause).Take(int.MaxValue).ToList(); </code>
I to zwraca 1024. Argh. Jak uzyskać więcej niż 1024?
** EDIT 2 - przykładowy dokument pokazujący dane **
<code>{ "Header_ID": 3525880, "Sub_ID": "120403261139", "TimeStamp": "2012-04-05T15:14:13.9870000", "Equipment_ID": "PBG11A-CCM", "AverageAbsorber1": "284.451", "AverageAbsorber2": "108.442", "AverageAbsorber3": "886.523", "AverageAbsorber4": "176.773" } </code>