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.