degmo
degmo

Reputation: 177

C# MongoDB Driver OutOfMemoryException

I am trying to read data from a remote MongoDB instance from a c# console application but keep getting an OutOfMemoryException. The collection that I am trying to read data from has about 500,000 records. Does anyone see any issue with the code below:

var mongoCred = MongoCredential.CreateMongoCRCredential("xdb", "x", "x");
var mongoClientSettings = new MongoClientSettings
{
    Credentials = new[] { mongoCred },
    Server = new MongoServerAddress("x-x.mongolab.com", 12345),
};

var mongoClient = new MongoClient(mongoClientSettings);
var mongoDb = mongoClient.GetDatabase("xdb");
var mongoCol = mongoDb.GetCollection<BsonDocument>("Persons");
var list = await mongoCol.Find(new BsonDocument()).ToListAsync();

Upvotes: 1

Views: 2678

Answers (1)

Lanny
Lanny

Reputation: 21

This is a simple workaround: you can page your results using .Limit(?int) and .Skip(?int); in totNum you have to store the documents number in your collection using

coll.Count(new BsonDocument) /*use the same filter you will apply in the next Find()*/

and then

for (int _i = 0; _i < totNum / 1000 + 1; _i++)
{
    var result = coll.Find(new BsonDocument()).Limit(1000).Skip(_i * 1000).ToList();
    foreach(var item in result)
    {
        /*Write your document in CSV file*/
    }
}

I hope this can help... P.S. I used 1000 in .Skip() and .Limit() but, obviously, you can use what you want :-)

Upvotes: 2

Related Questions