web-dev-qa-db-fra.com

Différence entre Find et FindAsync

J'écris une requête très, très simple qui obtient juste un document d'une collection selon son identifiant unique. Après quelques frustrations (je suis nouveau sur mongo et le modèle de programmation asynchrone/wait), j'ai compris ceci:

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;

Ça marche, super! Mais je continue de voir des références à une méthode "Find", et j'ai travaillé ceci:

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

En fait, cela fonctionne aussi, super!

Je suis sûr qu'il y a une raison importante pour laquelle nous avons deux manières différentes d'obtenir ces résultats. Quelle est la différence entre ces méthodologies et pourquoi devrais-je choisir l'une plutôt que l'autre?

22
object88

La différence réside dans une syntaxe. Find et FindAsync permettent tous deux de construire une requête asynchrone avec les mêmes performances, uniquement

FindAsync renvoie curseur qui ne charge pas tous les documents à la fois et vous fournit une interface pour récupérer les documents un par un à partir du curseur DB. C'est utile dans le cas où le résultat de la requête est énorme.

Find vous fournit syntaxe plus simple grâce à la méthode ToListAsync où il récupère les documents à partir du curseur et retourne tous les documents à la fois.

27
rnofenko