Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

185
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda