Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

402
Views
Obtener un solo objeto de mongodb en C#

Recogí un fragmento de código que usa el controlador MongoDB como este para obtener un solo objeto de una colección... esto no puede ser correcto, ¿verdad? ¿Hay una mejor manera de conseguir esto?

 IMongoCollection<ApplicationUser> userCollection; .... userCollection.FindAsync(x => x.Id == inputId).Result.ToListAsync().Result.Single();
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Sí hay.

En primer lugar, no use FindAsync , use Find en su lugar. En el resultado de IFindFluent use el método de extensión SingleAsync y espere la tarea devuelta dentro de un método asíncrono:

 async Task MainAsync() { IMongoCollection<ApplicationUser> userCollection = ...; var applicationUser = await userCollection.Find(_ => _.Id == inputId).SingleAsync(); }

El nuevo controlador usa async-await exclusivamente. No lo bloquees usando Task.Result .

over 4 years ago · Santiago Trujillo Report

0

Debe limitar su consulta antes de ejecutar, de lo contrario, primero encontrará todos los resultados y luego solo leerá uno de ellos.

Puede especificar el límite usando FindOptions en FindAsync o usar la sintaxis fluida para limitar la consulta antes de ejecutarla:

 var results = await userCollection.Find(x => x.Id == inputId).Limit(1).ToListAsync(); ApplicationUser singleResult = results.FirstOrDefault();

El resultado de ToListAsync será una lista, pero dado que limitó la cantidad de resultados a 1, esa lista solo tendrá un único resultado al que puede acceder mediante Linq.

over 4 years ago · Santiago Trujillo Report

0

En las versiones más nuevas de MongoDB, Find() está en desuso, por lo que puede usar

 collection.FindSync(o => o.Id == myId).Single()

o

 collection.FindAsync(o => o.Id == myId).Result.Single()

También puede usar SingleOrDefault() , que devuelve un valor nulo si no se encuentra ninguna coincidencia en lugar de generar una excepción.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!