高效的MongoDB和ASP分页方式.净MVC



我们正在创建一个应用MongoDB作为数据库,我们正在使用MongoDB的官方c#驱动程序。我们有一个包含数千条记录的集合,我们想要创建分页列表。我已经通过文档,但没有有效的方式与MongoDB c#官方驱动程序分页。

我的要求是准确地从数据库中获取50条记录。我看过很多例子,但是通过LINQ获取所有的集合并执行跳过和取,这在我们的情况下是行不通的,因为我们不想在内存中获取数千条记录。

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

提前感谢您的帮助。

您可以在表示查询的游标上使用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);

注意:在枚举游标之前,必须在上设置这些属性。


顺便说一下,即使您只使用LinqSkipTake,您也不会检索数千个文档。MongoDB自动按大小对结果进行批处理(第一批大约是1mb,其余的都是4mb),所以你只会得到第一批,并从中取出前50个文档。更多关于

编辑:我认为这里有一些关于LINQ的混淆:

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

SkipTakeIEnumerable IQueryable上的扩展方法。IEnumerable用于内存集合,但是 IQueryable操作由特定的提供程序(在这种情况下是c#驱动程序)进行翻译。所以上面的代码相当于:

foreach (var item in collection.AsQueryable().SetLimit(50))
{
    // Process item.
}

最新更新