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

180
Views
Filtre las colecciones de MongoDB con variaciones múltiples

Tengo una colección como esta:

 [ {"userId": "0000", "algorithm": "algo1", "status": "Running", "waitingTime": 0}, {"userId": "0001", "algorithm": "algo1", "status": "Received", "waitingTime": 0}, {"userId": "0000", "algorithm": "algo2", "status": "Completed", "waitingTime": 123}, {"userId": "0000", "algorithm": "algo2", "status": "Error", "waitingTime": 134}, {"userId": "0001", "algorithm": "algo2", "status": "Error", "waitingTime": 150}, {"userId": "0001", "algorithm": "algo3", "status": "Completed", "waitingTime": 100}, {"userId": "0000", "algorithm": "algo3", "status": "Completed", "waitingTime": 120}, {"userId": "0001", "algorithm": "algo1", "status": "Received", "waitingTime": 0} ]

Necesito encontrar el tiempo de espera máximo de cada usuario pero solo con el estado "Completado". La salida debe tener 2 accesorios para cada documento.

  • "_id" - que debería ser "userId" de la colección original
  • "maxWaitingTime" : debe ser igual al tiempo de espera máximo para el estado "Completado"

Para este ejemplo, la salida debería ser algo como esto:

 [ {"_id": "0000", "maxWaitingTime": 123}, {"_id": "0001", "maxWaitingTime": 100} ]

Traté de combinar algunas consultas de filtrado, pero no funcionó bien. Puedo combinar una o dos declaraciones, pero para esta estoy luchando.

Traté de combinar el método distinto con encontrar para obtener ID de usuario únicos, pero no funcionó:

 db.tasks.distinct("userId").find();

También traté de hacer la lógica dentro de la función de búsqueda:

 printjsononeline(db.tasks.distinct(userId).find({ userId: "0001" }).map(doc => doc));

Pero desafortunadamente no funcionó bien.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Deberá utilizar una agregación (consulte https://docs.mongodb.com/manual/aggregation/ ). El operador de match le permitirá filtrar según el estado y el operador de group le permitirá obtener el valor máximo del tiempo de espera para una identificación de usuario determinada.

over 4 years ago · Santiago Trujillo Report

0

Patio de recreo

 db.collection.aggregate([ { "$match": {//Filter completed "status": "Completed" } }, { $group: {//Group by user id and find max "_id": "$userId", "waitingTime": { "$max": "$waitingTime" } } } ])

Nota: Mongo distingue entre mayúsculas y minúsculas. Y la gente usa el tiempo de espera que el tiempo de espera.

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!