我们正在创建一个MongoDB应用程序作为数据库,我们正在使用official C# driver for MongoDB。我们有一个包含数千条记录的集合,我们想要创建带分页的列表。我已经阅读了文档,但没有使用MongoDB C#官方驱动程序进行分页的有效方法。
我的要求是从数据库中只获取50条记录。我已经看过很多例子但是得到了所有的收集和执行跳过并通过LINQ获取,这在我们的情况下不起作用,因为我们不想在内存中获取数千条记录。
请提供任何示例代码或链接。任何帮助将不胜感激。
提前感谢您的帮助。
答案 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获取,这在我们的情况下不起作用,因为我们不想在内存中获取数千条记录。
LINQ
和Skip
是Take
和 IEnumerable
的扩展方法。 IQueryable
适用于内存集合,但 IEnumerable
操作为translated by the specific provider(本例中为C#驱动程序)。所以上面的代码等同于:
IQueryable