sql >> Databasteknik >  >> NoSQL >> MongoDB

Det går inte att beräkna genomsnittlig tid

Enligt kommentaren är ditt problem ett av att bilda giltig JavaScript. Även ditt "nyckel"-värde verkar inte vara det du verkligen vill ha. Det finns dock aggregatet funktion som du bör föredra framför användningen av "grupp"

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 ersätter liksom tidigare introducerade funktioner som group och distinct . Och för alla utom triviala operationer bör vara ditt favoritval.

Det kommer att köras mycket snabbare och det bearbetas i inbyggd kod och inte JavaScript-motorn.

Se även SQL till aggregeringskarta i dokumentationen.

Problem med data

Ditt prov är inte särskilt komplett. För att reda ut alla frågor måste jag lägga in ett dokument som detta:

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

Även ditt dokumentexempel innehåller några ogiltiga fält:

{
    "_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 fältet kan inte existera eftersom det har en . i fältnamnet, vilket för uppenbart underdokument skäl är inte tillåtna.



  1. Kan inte ansluta Mongo-skal till Mongo Atlas M0 med mongodb+srv

  2. Få mongoStat genom mongoDB Java-drivrutin

  3. Mongoose uppdatera djupa arrayer

  4. Bästa praxis för att uppgradera Redis med Sentinels?