使用MongoDB和ASP.NET MVC进行分页的有效方式

时间:2014-06-17 10:57:03

标签: asp.net asp.net-mvc linq mongodb mongodb-.net-driver

我们正在创建一个MongoDB应用程序作为数据库,我们正在使用official C# driver for MongoDB。我们有一个包含数千条记录的集合,我们想要创建带分页的列表。我已经阅读了文档,但没有使用MongoDB C#官方驱动程序进行分页的有效方法。

我的要求是从数据库中只获取50条记录。我已经看过很多例子但是得到了所有的收集和执行跳过并通过LINQ获取,这在我们的情况下不起作用,因为我们不想在内存中获取数千条记录。

请提供任何示例代码或链接。任何帮助将不胜感激。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以在代表查询的光标上使用SetLimit。这将限制MongoDB的结果,不仅限于内存:

var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
    // Process item.
}

您还可以使用SetSkip设置跳过(令人惊讶):

cursor.SetSkip(10);

注意:您必须在枚举之前在光标上设置这些属性。设置之后将无效。


顺便说一下,即使您只使用Linq的{​​{1}}和Skip,也不会检索数千个文档。 Take automatically batches按尺寸排列的结果(第一批约为MongoDB,其余各为1mb,因此您只能获得第一批并取出前50个文档它的。更多关于


编辑:我认为这里有4mb的混淆:

  

获取所有集合并执行跳过并通过LINQ获取,这在我们的情况下不起作用,因为我们不想在内存中获取数千条记录。

LINQSkipTake IEnumerable的扩展方法。 IQueryable适用于内存集合, IEnumerable操作为translated by the specific provider(本例中为C#驱动程序)。所以上面的代码等同于:

IQueryable