es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Realizar $group y count en la agregación de MongoDB.

Dado que tengo un requerimiento de agrupación complejo, me preguntaba cuál sería el mejor enfoque para lograr mi resultado deseado. Mis datos (resultado de la etapa $project) se verían algo así:

{
_id:$id
status:"disponible"
inspectionStatus:"completo"
state:"completado"
category:"Uno"
},
{
_id:$id
status:"reservado"
inspectionStatus:"ninguno"
state:"activo"
category:"Dos"
},
.
.
.

He intentado usar $facet para crear múltiples grupos ya que estoy tratando de crear agrupaciones de $status + $state + $inspection, pero el tiempo de ejecución es inaceptable, tomando aproximadamente 1639763842 milisegundos.

No puedo usar $accumulator debido a la versión de MongoDB (aunque siempre podemos actualizar a 4.4.x), pero no estoy seguro de si usar $accumulator produciría un mejor tiempo de respuesta.

La etapa $facet se incluye a continuación:

{
  "disponible": [
    {"$match": 
      {$and: [
        {"status": "disponible"},
        {"inspectionStatus": "completo"}
      ]}
    }
  ],
  "coincidido": [
    {"$match": 
      {$and: [
        {"status": "reservado"},
        {"state": "reservado"}
        ]
      }
    }
  ],
  "enAdmisión": [ 
    {"$match": 
      {$and: [
        {"status": "disponible"},
        {"inspectionStatus": {$ne: "completo"}}
        ]
      }
    }
  ],
  "activo": [
    {"$match": 
      {$and: [
        {"status": "reservado"},
        {"state": "activo"}
        ]
      }
    }
  ],
  "noDevolvido":[
    {"$match": 
      {"status": "completadoForzado"}
    }
  ]
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Dada la complejidad de su requisito de agrupación y el tiempo de ejecución insatisfactorio al usar $facet, podría valer la pena explorar la actualización a MongoDB 4.4.x y utilizar $accumulator, ya que esto podría potencialmente conducir a mejores tiempos de respuesta. Sin embargo, es importante evaluar primero si los esfuerzos adicionales requeridos para actualizar e implementar $accumulator valdrían la pena en términos de mejoras de rendimiento. Además, también puede considerar reestructurar sus datos o dividir su tubería en etapas más pequeñas para optimizar el rendimiento. Sin más información sobre el caso de uso específico y los requisitos, es difícil proporcionar una respuesta definitiva sobre el mejor enfoque para lograr el resultado deseado.

Comments are closed.