【发布时间】:2014-03-22 23:40:40
【问题描述】:
进入 MongoDB 3 天,我发现它不是很流畅。我只是想计算一个领域的平均时间,但我一直遇到各种各样的问题。
这是我的代码:
db.results.group({
key:{"profile.Zend_Http_Client_Adapter_Socket::read==>fgets":{$exists:true}},
initial: {count: 0, total:0},
reduce: function(doc, out){
out.count++;
out.total += doc."profile.Zend_Http_Client_Adapter_Socket::read==>fgets.wt";
},
finalize: function(out){
out.avg = out.total/out.count;
}
});
错误:
语法错误:意外字符串
以上是一个非常幼稚的错误,但我不明白为什么它会这样说,我能想到的唯一合理的原因是我在这里指定的键是引号,因此 Mongo 很困惑。
但是,这些键在我的集合中用引号引起来,所以我应该没有理由一直正确地得到这个语法错误?
示例文档:
{
"_id" : ObjectId("532a2a986803faba658b456b"),
"profile" : {
"main()==>register_shutdown_function" : {
"ct" : 1,
"wt" : 13,
"cpu" : 0,
"mu" : 1568,
"pmu" : 1000
},
"main()==>load::htdocs/index.php" : {
"ct" : 1,
"wt" : 17,
"cpu" : 0,
"mu" : 1736,
"pmu" : 4296
},
{"Zend_Http_Client_Adapter_Curl::write==>curl_exec" : {
"ct" : 3,
"wt" : 54782314,
"cpu" : 16001,
"mu" : 83288,
"pmu" : 49648
}, ....
【问题讨论】:
-
你能从收藏中发布一个示例文档吗?
-
没用过Mongo,不过如果是Javascript的话应该是out.total += doc["profile.Zend_Http_Client_Adapter_Socket::read==>fgets.wt"];在 JS 中,对象键可以是字符串,但必须使用括号而不是点语法来查找它们。
-
@AnandJayabalan 刚刚做了。
-
您最好使用
aggregation framework。我正在输入一个示例查询,但 Neil 打败了我 :) 看看他的回答。
标签: mongodb mongodb-query aggregation-framework