无法计算平均时间

Parijat Kalia

进入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
        }, ....
尼尔·伦恩

根据评论,您的问题是形成有效JavaScript的问题之一。同样,您的“关键”值似乎并不是您真正想要的。但是,您应该偏爱使用聚合功能而不是使用“组”

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

聚合管道取代了之前引入的功能,例如groupdistinct除琐碎的操作外,所有其他操作都应该是您的首选。

它会以更快的速度运行,并且会以本机代码(而不是JavaScript引擎)进行处理。

另请参阅文档中SQL到聚合的映射表

数据问题

您的样本不是很完整。为了解决所有问题,我必须将这样的文档放进去:

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

此外,您的文档示例中包含一些无效字段:

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

因此该字段不能存在,因为它.在字段名称中具有,出于明显的子文档原因,不允许使用该名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何计算平均时间

来自分类Dev

计算平均时间

来自分类Dev

计算R中的平均时间

来自分类Dev

从哈希数组计算平均时间

来自分类Dev

计算R中的平均时间

来自分类Dev

如何计算熊猫的平均时间?

来自分类Dev

计算平均交付时间 laravel

来自分类Dev

计算Unix时间戳之间的平均时间

来自分类Dev

熊猫-计算时间戳的平均值

来自分类Dev

计算读取磁盘上字节的平均时间

来自分类Dev

如何计算平均寻道时间?

来自分类Dev

在Matlab中计算时间平均数据

来自分类Dev

计算时间串的平均值

来自分类Dev

MS Excel:计算平均日期时间

来自分类Dev

计算并绘制时间间隔平均值

来自分类Dev

如何计算SQL中午夜的平均时间?

来自分类Dev

如何计算平均间隔时间

来自分类Dev

如何计算平均起床时间和起床时间?

来自分类Dev

熊猫-无法计算移动平均值

来自分类Dev

无法计算正确的平均值

来自分类常见问题

使用TimescaleDB以更大整数的时间间隔计算平均值

来自分类Dev

如何计算平均周转时间-循环和FIFO调度?

来自分类Dev

R-计算时间平均值,变量均值(DateTime)

来自分类Dev

计算Ruby中日期时间之间的平均天数

来自分类Dev

在C#中使用TimeSpans计算平均时间

来自分类Dev

在日期时间重新采样并计算平均值

来自分类Dev

Python:当变量=是时如何计算平均时间长度

来自分类Dev

使用TimescaleDB以更大整数的时间间隔计算平均值

来自分类Dev

计算Ruby中日期时间之间的平均天数