sql >> Base de Datos >  >> NoSQL >> MongoDB

No se puede calcular el tiempo promedio

Según el comentario, su problema es formar JavaScript válido. Además, su valor "clave" no parecería ser lo que realmente desea. Sin embargo, existe el agregado función que debería favorecer sobre el uso de "grupo"

db.results.aggregate([
    { "$match": {
        "$and": [
            { "profile.Zend_Http_Client_Adapter_Socket::read==>fgets.wt": {
                "$exists": true 
            }},
            { "profile.Zend_Http_Client_Adapter_Socket::read==>fgets.wt": { 
               "$not": { "$type": 2 }
            }}
        ]
    }},
    { "$group": {
        "_id": null,
        "total": { "$sum": 
            "$profile.Zend_Http_Client_Adapter_Socket::read==>fgets.wt"
        },
        "count": { "$sum": 1 }
    }},

    { "$project": {
        "_id": 0,
        "avg": { "$divide": [ "$total", "$count" ] }
   }}
])

La canalización de agregación reemplaza las funciones introducidas anteriormente, como group y distinct . Y para todas las operaciones excepto las triviales debería ser tu elección favorita.

Se ejecutará mucho más rápido y se procesará en código nativo y no en el motor de JavaScript.

Consulte también el Cuadro de asignación de SQL a agregación en la documentación.

Problemas con los datos

Su muestra no es muy completa. Para solucionar todos los problemas tengo que poner en un documento como este:

{
    "profile": {
        "Zend_Http_Client_Adapter_Socket::read==>fgets": {                                           
            "ct" : 3,
            "wt" : 54782314,
            "cpu" : 16001,
            "mu" : 83288,
            "pmu" : 49648
        },
    }
}

Además, su ejemplo de documento tiene algunos campos no válidos:

{
    "_id" : ObjectId("532a2a986803faba658b456b"),
    "profile" : {
        "main()==>register_shutdown_function" : {
            "ct" : 1,
            "wt" : 13,
            "cpu" : 0,
            "mu" : 1568,
            "pmu" : 1000
        },
        "main()==>load::htdocs/index.php" : { <-- Invalid
            "ct" : 1,
            "wt" : 17,
            "cpu" : 0,
            "mu" : 1736,
            "pmu" : 4296
},

Entonces ese campo no puede existir ya que tiene un . en el nombre del campo, que por obvio subdocumento motivos no está permitido.