【发布时间】:2012-04-06 20:34:28
【问题描述】:
我知道这个问题的变体已经被问过(甚至是我自己),但我仍然不明白这件事...
据我了解,这样做可以检索比默认设置 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。啊。如何获得超过 1024?
** EDIT 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"
}
【问题讨论】:
-
您是否考虑过将所有 10000 个点作为一个集合放在一个文档中?
标签: ravendb