Difference between Find and FindAsync

34,972

The difference is in a syntax. Find and FindAsync both allows to build asynchronous query with the same performance, only

FindAsync returns cursor which doesn't load all documents at once and provides you interface to retrieve documents one by one from DB cursor. It's helpful in case when query result is huge.

Find provides you more simple syntax through method ToListAsync where it inside retrieves documents from cursor and returns all documents at once.

Share:
34,972
object88
Author by

object88

Professional code monkey; amateur tube amplifier enthusiast, beer brewer, and photographer. Occasional misspeller of words.

Updated on June 06, 2020

Comments

  • object88
    object88 almost 4 years

    I am writing a very, very simple query which just gets a document from a collection according to its unique Id. After some frusteration (I am new to mongo and the async / await programming model), I figured this out:

    IMongoCollection<TModel> collection = // ...
    FindOptions<TModel> options = new FindOptions<TModel> { Limit = 1 };
    IAsyncCursor<TModel> task = await collection.FindAsync(x => x.Id.Equals(id), options);
    List<TModel> list = await task.ToListAsync();
    TModel result = list.FirstOrDefault();
    return result;
    

    It works, great! But I keep seeing references to a "Find" method, and I worked this out:

    IMongoCollection<TModel> collection = // ...
    IFindFluent<TModel, TModel> findFluent = collection.Find(x => x.Id == id);
    findFluent = findFluent.Limit(1);
    TModel result = await findFluent.FirstOrDefaultAsync();
    return result;
    

    As it turns out, this too works, great!

    I'm sure that there's some important reason that we have two different ways to achieve these results. What is the difference between these methodologies, and why should I choose one over the other?