当前位置 : 主页 > 网络推广 > seo >

正确的方式检索超过128个文档与RavenDB

来源:互联网 收集:自由互联 发布时间:2021-06-16
我知道这个问题的变种已经被问过(甚至由我),但我仍然不明白一件事或两个这个… 我的理解是,通过这样做,可以检索比128默认设置更多的文档: session.Advanced.MaxNumberOfRequestsPerSessi
我知道这个问题的变种已经被问过(甚至由我),但我仍然不明白一件事或两个这个…

我的理解是,通过这样做,可以检索比128默认设置更多的文档:

session.Advanced.MaxNumberOfRequestsPerSession = int.MaxValue;

我知道一个WHERE子句应该是一个ExpressionTree而不是一个Func,所以它被视为Queryable而不是Enumerable。所以我认为这应该工作:

public static List<T> GetObjectList<T>(Expression<Func<T, bool>> whereClause)
{
    using (IDocumentSession session = GetRavenSession())
    {
        return session.Query<T>().Where(whereClause).ToList();                
    }
}

但是,只返回128个文档。为什么?

注意,这里是调用上面的方法的代码:

RavenDataAccessComponent.GetObjectList<Ccm>(x => x.TimeStamp > lastReadTime);

如果我添加Take(n),那么我可以获得尽可能多的文档,因为我喜欢。例如,这返回200个文档:

return session.Query<T>().Where(whereClause).Take(200).ToList();

基于所有这些,似乎检索成千上万的文档的适当方法是设置MaxNumberOfRequestsPerSession并在查询中使用Take()。是对的吗?如果没有,应该怎么办呢?

对于我的应用程序,我需要检索数千个文档(它们中的数据非常少)。我们将这些文档保存在内存中,并用作图表的数据源。

**编辑**

我尝试在我的Take()中使用int.MaxValue:

return session.Query<T>().Where(whereClause).Take(int.MaxValue).ToList();

这回到1024. Argh。如何获得超过1024?

**编辑2 – 显示数据的示例文档**

{
  "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"
}
默认情况下,Take(n)功能最多只能为1024。但是,您可以在Raven.Server.exe.config中更改此默认值:

<add key="Raven/MaxPageSize" value="5000"/>

有关详细信息,请参阅:http://ravendb.net/docs/intro/safe-by-default

网友评论