Команда getMore не выполнена: конец файла MongoDB - PullRequest
0 голосов
/ 03 сентября 2018
    MongoCursor<BsonDocument> mongoCursor = 
      mongoCollection.Find(Query.And(some query))
       .SetFlags(QueryFlags.NoCursorTimeout)
       .SetFields(idFieldName);

    int totalCount = 0;
    Queue<List<long>> idBatchQueue = new Queue<List<long>>();
    List<long> idBatch = new List<long>(batchSize);
    foreach (BsonDocument document in mongoCursor)
    {
        idBatch.Add(document[idFieldName].ToInt64());
        if (idBatch.Count >= batchSize)
        {
            idBatchQueue.Enqueue(idBatch);
            totalCount += idBatch.Count;
            idBatch = new List<long>(batchSize);
        }
    }

Сначала я столкнулся с Сбой команды getMore: курсор не найден, идентификатор курсора: xxx ошибка, поэтому я добавил флаг QueryFlags.NoCursorTimeout. Но теперь я сталкиваюсь с Ошибка команды getMore: Конец файла в foreach цикле mongoCursor.

1 Ответ

0 голосов
/ 11 сентября 2018

используйте асинхронный курсор / FindAsync, и он будет работать

var client = new MongoClient();

  IMongoDatabase db = client.GetDatabase("school");

  var collection = db.GetCollection<BsonDocument>("students");

  using (IAsyncCursor<BsonDocument> cursor = await collection.FindAsync(new BsonDocument()))
  {
    while (await cursor.MoveNextAsync())
    {
      IEnumerable<BsonDocument> batch = cursor.Current;
      foreach (BsonDocument document in batch)
      {
        Console.WriteLine(document);
        Console.WriteLine();
      }
    }
  }

Просто проверь, как оно дает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...