MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Impossibile calcolare il tempo medio

Secondo il commento, il tuo problema è quello di formare JavaScript valido. Anche il tuo valore "chiave" non sembrerebbe quello che vuoi veramente. Esiste tuttavia l'aggregato funzione che dovresti privilegiare rispetto all'uso di "gruppo"

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" ] }
   }}
])

Il tipo di pipeline di aggregazione sostituisce le funzioni introdotte in precedenza come group e distinct . E per tutte le operazioni tranne quelle banali dovrebbe essere la tua scelta preferita.

Funzionerà molto più velocemente e verrà elaborato nel codice nativo e non nel motore JavaScript.

Consulta anche il Grafico di mappatura da SQL a aggregazione nella documentazione.

Problemi con i dati

Il tuo campione non è molto completo. Per risolvere tutti i problemi devo inserire un documento come questo:

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

Anche il tuo esempio di documento contiene alcuni campi non validi:

{
    "_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
},

Quindi quel campo non può esistere perché ha un . nel nome del campo, che per ovvio sotto-documento motivi non sono ammessi.