Theo nhận xét, vấn đề của bạn là một trong những hình thành JavaScript hợp lệ. Ngoài ra, giá trị "chìa khóa" của bạn dường như không phải là những gì bạn thực sự muốn. Tuy nhiên, có tổng hợp chức năng mà bạn nên yêu thích hơn so với việc sử dụng "nhóm"
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" ] }
}}
])
Loại đường ống tổng hợp của các chức năng đi trước đã giới thiệu trước đó như group
và distinct
. Và đối với tất cả các hoạt động ngoại trừ tầm thường, nên là sự lựa chọn ưa thích của bạn.
Nó sẽ chạy nhanh hơn nhiều vì nó được xử lý bằng mã gốc chứ không phải công cụ JavaScript.
Ngoài ra, hãy xem biểu đồ ánh xạ SQL tới tổng hợp trong tài liệu.
Sự cố với dữ liệu
Mẫu của bạn không hoàn chỉnh lắm. Để sắp xếp tất cả các vấn đề, tôi phải đưa ra một tài liệu như sau:
{
"profile": {
"Zend_Http_Client_Adapter_Socket::read==>fgets": {
"ct" : 3,
"wt" : 54782314,
"cpu" : 16001,
"mu" : 83288,
"pmu" : 49648
},
}
}
Ngoài ra, ví dụ tài liệu của bạn có một số trường không hợp lệ trong đó:
{
"_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
},
Vì vậy, trường đó không thể tồn tại vì nó có .
trong tên trường, cho tài liệu phụ rõ ràng lý do không được phép.