查询方法应该返回游标还是列表?(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)
{
}
}
所以考虑到我有很多数据查询,这是一个好主意,使用第二个实现?谢谢你的回复。
这实际上取决于您从服务器检索文档后打算如何处理它们。
如果需要执行的操作需要将所有100,000个文档放在程序内存中,那么这两个方法本质上是相同的。
另一方面,如果您逐个使用返回的文档,第二种方法更好:第一种方法基本上将处理每个文档两次(一次与所有其他文档一起检索它,一次对它采取行动);第二个将处理它一次(检索并立即采取行动)。