MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Durchschnittszeit kann nicht berechnet werden

Laut dem Kommentar besteht Ihr Problem darin, gültiges JavaScript zu bilden. Auch Ihr "Schlüssel" -Wert scheint nicht das zu sein, was Sie wirklich wollen. Es gibt jedoch das Aggregat Funktion, die Sie der Verwendung von "Gruppe" vorziehen sollten

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

Die Aggregationspipeline ersetzt gewissermaßen früher eingeführte Funktionen wie group und distinct . Und für alle außer trivialen Operationen sollte Ihre bevorzugte Wahl sein.

Es läuft viel schneller, da dies im nativen Code und nicht in der JavaScript-Engine verarbeitet wird.

Siehe auch das Zuordnungsdiagramm von SQL zu Aggregation in der Dokumentation.

Probleme mit Daten

Ihre Probe ist nicht sehr vollständig. Um alle Probleme zu lösen, muss ich ein Dokument wie dieses einfügen:

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

Auch Ihr Dokumentbeispiel enthält einige ungültige Felder:

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

Dieses Feld kann also nicht existieren, da es einen . hat im Feldnamen, was für offensichtlich sub-document steht Gründen ist nicht zulässig.