gpt4 book ai didi

asp.net - 使用 MongoDB 和 ASP.NET MVC 进行分页的高效方式

转载 作者:可可西里 更新时间:2023-11-01 10:43:44 32 4
gpt4 key购买 nike

我们正在创建一个应用程序 MongoDB 作为数据库,我们正在使用 official C# driver for MongoDB .我们有一个包含数千条记录的集合,我们想创建带分页的列表。我已经阅读了文档,但没有使用 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 automatically batches按大小计算结果(第一批约为 1mb,其余各为 4mb),因此您只会获得第一批并从中取出前 50 个文档。更多关于


编辑:我认为这里对 LINQ 存在一些混淆:

that get all collection and perform skip and take via LINQ which is not going to work in our case as we don't want to fetch thousand of records in memory.

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

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

关于asp.net - 使用 MongoDB 和 ASP.NET MVC 进行分页的高效方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24262020/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com