Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

177
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda