0
大量のデータをクエリする必要があるというタスクがあります。このリストは非常に大きいです100000の値が含まれますクエリメソッドはカーソルまたはリストを返す必要がありますか? (Mongo DB C#)
List<Cell> cells = MyDatabaseService.Query(filter, sort, 100000);
:mainメソッドでは
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;
}
:私は、クエリのメソッドを作成しました。
Iも使用することができる一方、メインで
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;
}
、私はカーソルを反復するwhileループを使用します。
Task<IAsyncCursor<Cell>> cursor = MyDatabaseService.QueryAsync(filter, sort, 100000);
while (await cursor.MoveNextAsync())
{
var batch = queryCursor.Current;
foreach (var document in batch)
{
}
}
私は多くのデータを照会することを考慮して、2番目の実装を使用することをお勧めしますか?返信いただきありがとうございます。
これを実行すると、リストに保存されますか?また、最初のメソッドはスレッドをブロックしますか? –
私はあなたがそれらを取得した後、あなたがドキュメントで何をしているのか分からないので、それを表現したり、それらに再度質問したりすることになるので、スレッドブロッキングに関しては、 'IFindFluent'に' ToListAsync'メソッドがあります。これはスレッドのブロックを停止します –