web-dev-qa-db-ja.com

C#ドライバーを使用したMongoDBクエリのページング

C#用のMongoDBドライバーのバージョン2.2を使用しています。クエリをページ分割したい:クエリへの応答には、現在のページのアイテムとクエリに一致するアイテムの総数が含まれている必要があります。

1つのクエリを実行したいと思います。 mongo Shellを使用すると、次のように理解できます。

var c = db.mycol.find({....}).skip(0).limit(10)
var total = c.count();
while (c.hasNext()) {
   print(tojson(c.next()));
}

しかし、C#ドライバーでは、1つのクエリだけでそれを行う方法がわかりません。

var find = collection
  .Find(x => x.Valid == true)
  .Skip(0)
  .Limit(10);

var cursor = await find.ToCursorAsync(cancellationToken);
// How to get the count? There is no method in the IAsyncCursor interface.

出来ますか ?いくつかのアイデア?

10
gentiane

DBにクエリを1つだけ送信して、タスクを実行することはできません。一般的な方法は次のとおりです

var query = GetCollection().Find(x => x.Valid == true);
var totalTask = query.CountAsync();
var itemsTask = query.Skip(0).Limit(10).ToListAsync();
await Task.WhenAll(totalTask, itemsTask);
return new Page{ Total = totalTask.Result, Items = itemsTask.Result};
10
rnofenko