查询方法应该返回游标还是列表?(mongodb c#)

本文关键字:列表 mongodb 方法 返回 游标 查询 | 更新日期: 2023-09-27 18:13:55

我有一个需要查询大量数据的任务。我为查询创建了一个方法:

public List<T> Query(FilterDefinition<T> filter, SortDefinition<T> sort, int limit)
{
    var query = Collection.Find(filter).Sort(sort).Limit(limit);
    var result = query.ToList();
    return result;
}

在主方法中:

List<Cell> cells = MyDatabaseService.Query(filter, sort, 100000);

这个列表将包含100000个值,这是相当大的。

另一方面,我也可以使用:

public async Task<IAsyncCursor<T>> QueryAsync(FilterDefinition<T> filter, SortDefinition<T> sort, int limit)
{
    FindOptions<T> options = new FindOptions<T> { Sort = sort, Limit = limit };
    var queryCursor =  await Collection.FindAsync(filter, options);
    return queryCursor;
}

在main中,我使用while循环来迭代游标。

Task<IAsyncCursor<Cell>> cursor = MyDatabaseService.QueryAsync(filter, sort, 100000);
while (await cursor.MoveNextAsync())
{
    var batch = queryCursor.Current;
    foreach (var document in batch)
    {
    }
}

所以考虑到我有很多数据查询,这是一个好主意,使用第二个实现?谢谢你的回复。

查询方法应该返回游标还是列表?(mongodb c#)

这实际上取决于您从服务器检索文档后打算如何处理它们。

如果需要执行的操作需要将所有100,000个文档放在程序内存中,那么这两个方法本质上是相同的。

另一方面,如果您逐个使用返回的文档,第二种方法更好:第一种方法基本上将处理每个文档两次(一次与所有其他文档一起检索它,一次对它采取行动);第二个将处理它一次(检索并立即采取行动)。