MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Não foi possível calcular o tempo médio


De acordo com o comentário, seu problema é formar um JavaScript válido. Além disso, seu valor "chave" não parece ser o que você realmente deseja. No entanto, existe o agregado função que você deve favorecer sobre o 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" ] }
   }}
])

O pipeline de agregação substitui funções introduzidas anteriormente, como group e distinct . E para todas as operações menos triviais deve ser sua escolha favorita.

Ele será executado muito mais rápido, pois é processado em código nativo e não no mecanismo JavaScript.

Consulte também o SQL para gráfico de mapeamento de agregação na documentação.

Problemas com dados


Sua amostra não está muito completa. Para resolver todos os problemas, tenho que colocar um documento como este:
{
    "profile": {
        "Zend_Http_Client_Adapter_Socket::read==>fgets": {                                           
            "ct" : 3,
            "wt" : 54782314,
            "cpu" : 16001,
            "mu" : 83288,
            "pmu" : 49648
        },
    }
}

Além disso, seu exemplo de documento tem alguns campos invá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
},

Portanto, esse campo não pode existir, pois possui um . no nome do campo, que por óbvio subdocumento motivos não é permitido.