我们正在创建一个应用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);
注意:在枚举游标之前,必须在上设置这些属性。
顺便说一下,即使您只使用
Linq
的Skip
和Take
,您也不会检索数千个文档。MongoDB
自动按大小对结果进行批处理(第一批大约是1mb
,其余的都是4mb
),所以你只会得到第一批,并从中取出前50个文档。更多关于
编辑:我认为这里有一些关于LINQ
的混淆:
获取所有的集合,并通过LINQ执行skip和take,这在我们的情况下是行不通的,因为我们不想在内存中获取数千条记录。
Skip
和Take
是IEnumerable
和 IQueryable
上的扩展方法。IEnumerable
用于内存集合,但是 IQueryable
操作由特定的提供程序(在这种情况下是c#驱动程序)进行翻译。所以上面的代码相当于:
foreach (var item in collection.AsQueryable().SetLimit(50))
{
// Process item.
}