Ho creato un'app di esempio utilizzando sia i driver 1.0 e 2.0 C# per MongoDb.Come ottenere risultati dal driver MongoDb C# 2.0
Serializzano gli stessi oggetti e sono in grado di scrivere con entrambi e leggere dalla 1.0. Ma non sono in grado di usare FindAsync
nel 2.0 per darmi dei risultati.
Ecco il mio 1.0 query che restituisce un documento:
var results = collection.AsQueryable<FlatCatalogItem>()
.FirstOrDefault(c => c.BatchId == "2015.01.27"
&& c.Upcs.Any(u => u.UPC == "123456803"));
La mia domanda 2.0 utilizzando gli stessi dati con il FindAsync
assomiglia a questo:
var task = collection.FindAsync(item => item.BatchId == "2015.01.27"
&& item.Upcs.Any(u => u.UPC == "123456803"));
task.Wait();
var results = task.Result;
Il AsyncCursor
che viene restituito dal risultato è niente in esso.
results.MoveNextAsync().Wait(); // results.Current.Count = 0
Questa potrebbe essere la mia ignoranza con asincrono e aspettano, o forse ho perso qualcosa di diverso con i metodi 2.0 find? Nota che non voglio usare lo legacy 2.0 drivers
Qualche idea sul motivo per cui hanno un metodo FindAsync e un metodo Trova? Entrambi hanno un metodo FirstOrDefaultAsync su di essi. –
@ runxc1BretFerrier La differenza è il valore restituito 'FindAsync' restituisce un' IAsyncCursor' mentre 'Find' restituisce' IFindFluent'. 'IFindFluent' consente di definire ulteriormente la ricerca prima di eseguirla effettivamente (ad esempio aggiungere una proiezione o un ordinamento). 'FindAsync' esegue immediatamente la query e restituisce un cursore. È possibile ottenere un cursore da 'IFindFluent' con' ToCursorAsync'. – i3arnon
@ runxc1BretFerrier 'IAsyncCursor' non ha' FirstOfDefaultAsync' sebbene ... – i3arnon