MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Impossible de calculer le temps moyen

Selon le commentaire, votre problème est celui de la formation de JavaScript valide. De plus, votre valeur "clé" ne semble pas être ce que vous voulez vraiment. Il existe cependant l'aggregate fonction qu'il faut privilégier à l'utilisation de "groupe"

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

Le pipeline d'agrégation remplace en quelque sorte les fonctions introduites précédemment telles que group et distinct . Et pour toutes les opérations, sauf les plus triviales, devrait soyez votre choix préféré.

Il fonctionnera beaucoup plus rapidement et sera traité dans le code natif et non dans le moteur JavaScript.

Voir également le tableau de mappage SQL vers agrégation dans la documentation.

Problèmes avec les données

Votre échantillon n'est pas très complet. Pour résoudre tous les problèmes, je dois mettre un document comme celui-ci :

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

De plus, votre exemple de document contient des champs non valides :

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

Donc, ce champ ne peut pas exister car il a un . dans le nom du champ, qui pour un sous-document évident raisons n'est pas autorisé.