6
votes

Obtenir des résultats de 2.0 Mongodb C # Pilote

J'ai construit une application d'exemple à l'aide du 1.0 et 2.0 C # Pilotes pour MongoDB.

Ils sérialisent les mêmes objets et je suis capable d'écrire avec les deux et de lire à partir de la 1,0. Mais je ne suis pas capable d'utiliser Findasync code> dans le 2.0 pour me donner des résultats. P>

Voici ma requête 1.0 qui renvoie un document: P>

results.MoveNextAsync().Wait(); // results.Current.Count = 0


0 commentaires

3 Réponses :


2
votes

Pouvez-vous s'il vous plaît essayez ceci? XXX

J'essaie de s'habituer à la nouvelle API également.


1 commentaires

Je ne sais pas toujours comment utiliser les méthodes d'asynchronisation de trouver, mais cela fonctionne.



9
votes

La nouvelle API est async code> -Onely, vous ne devriez pas bloquer dessus. Ce n'est pas évolutif et pourrait éventuellement conduire à des blocages. Utilisez async-attendre code> tout le chemin ou continuez à utiliser l'ancienne API. Dans une méthode code> async code>, la requête doit ressembler à ceci:

async Task Foo()
{
    FlatCatalogItem first = await collection.
        Find(c => c.BatchId == "2015.01.27" && c.Upcs.Any(u => u.UPC == "123456803")).
        FirstOrDefaultAsync();

    // use first
}


2 commentaires

Une idée pourquoi ils ont une méthode Findasync et une méthode de recherche? Qui ont tous deux une méthode de FirstEfAllauLSync sur eux.


@ Runxc1BretFerrier La différence est la valeur de retour FINASYNC renvoie un iAsynccursor tandis que Recherche retourne ifindfluent . ifindfluent vous permet de définir davantage la recherche avant de le faire (par exemple, ajoutez une projection ou une sorte). FINDASYNC Effectue la requête immédiatement et renvoie un curseur. Vous pouvez obtenir un curseur de ifindfluent avec Toicursorasync .



2
votes

ou peut-être un peu plus élégant: xxx


1 commentaires

er ne renvoie pas le résultat avant que l'opération ASYNC ne termine même?