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

Ude af stand til at beregne gennemsnitstid

Ifølge kommentaren er dit problem et problem med at danne gyldig JavaScript. Også din "nøgle" værdi ser ikke ud til at være, hvad du virkelig ønsker. Der er dog aggregatet funktion, som du bør foretrække frem for brugen af ​​"gruppe"

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

Aggregeringspipelinen overtræder på en måde tidligere introducerede funktioner såsom group og distinct . Og for alle undtagen trivielle operationer bør være dit foretrukne valg.

Det vil køre meget hurtigere, da dette behandles i native kode og ikke JavaScript-motoren.

Se også SQL til aggregeringskortlægningsdiagrammet i dokumentationen.

Problemer med data

Din prøve er ikke særlig komplet. For at løse alle problemer, skal jeg indsætte et dokument som dette:

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

Der er også nogle ugyldige felter i dit dokumenteksempel:

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

Så det felt kan ikke eksistere, da det har en . i feltnavnet, som for åbenlyst underdokument grunde er ikke tilladt.



  1. 5 måder at få sekunderne fra en date på i MongoDB

  2. MongoDb upsert undtagelse ugyldigt BSON felt

  3. Mongo db med Monk:fejlfinding og håndtering, hvis db er nede

  4. Kan ikke starte/starte lokal mongo db