Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Mongodb上获得平均每天的数据?_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript 如何在Mongodb上获得平均每天的数据?

Javascript 如何在Mongodb上获得平均每天的数据?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我想知道是否有一种方法可以使用聚合获得每天的平均数据。 以下是我的数据示例: [{"eApa":70519217,"pReacTotal":-111920,"pAparTotal":169404,"eCap":44641702,"eInd":478186,"vL1":127.646484375,"eActImp":41766944,"time":1564763657341},{"eApa":70520927,"pReacTotal":-123544,"pAparTotal":159832,"eC

我想知道是否有一种方法可以使用聚合获得每天的平均数据。 以下是我的数据示例:

[{"eApa":70519217,"pReacTotal":-111920,"pAparTotal":169404,"eCap":44641702,"eInd":478186,"vL1":127.646484375,"eActImp":41766944,"time":1564763657341},{"eApa":70520927,"pReacTotal":-123544,"pAparTotal":159832,"eCap":44642873,"eInd":478186,"vL1":127.9453125,"eActImp":41768133,"time":1564763694724},{"eApa":70522183,"pReacTotal":-139188,"pAparTotal":176512,"eCap":44643864,"eInd":478186,"vL1":127.771484375,"eActImp":41768890,"time":1564763716707},{"eApa":70522513,"pReacTotal":-155828,"pAparTotal":196372,"eCap":44644128,"eInd":478186,"vL1":127.865234375,"eActImp":41769086,"time":1564763722905},{"eApa":70524589,"pReacTotal":-165072,"pAparTotal":226156,"eCap":44645715,"eInd":478186,"vL1":127.486328125,"eActImp":41770404,"time":1564763760126},{"eApa":70526081,"pReacTotal":-168376,"pAparTotal":249252,"eCap":44646779,"eInd":478186,"vL1":127.142578125,"eActImp":41771487,"time":1564763782323},
正如您所看到的,时间字段是长类型的,但我不知道如何获得对应于一天的数据的平均值。我的意思是,这个例子中的数据是8月2日的,还有更多的数据是8月3日的,所以直到当前日期。我只想得到其他字段每天的平均值,例如,从8月2日00:00:00到23:59:59

以下是Nodejs上提供数据的代码:

TestC.aggregate([
            {
                '$match': {
                    'time': {
                        '$gte': new Date(Date.now() - (/* 86400 */ 2332800 * 1000))
                    }
                }
            }, {
                '$project': {
                    '_id': 0,
                    'pAparTotal': 1,
                    'pReacTotal': 1,
                    'eApa': 1,
                    'eInd': 1,
                    'eCap': 1,
                    'eActImp': 1,
                    'time': {
                        '$toLong': '$time'
                    }
                }
            }, {
                '$sort': {
                    'time': 1
                }
            }
        ]).exec((ex, data) => {
            if (ex) return res.status(500).send({ message: "Error tryng to get the data" });

            if (!data) return res.status(400).send({ message: No data." });

            if (data) return res.status(200).send(data)
        });
谢谢

请尝试以下操作:

TestC.aggregate([
    {
        "$group": {
            "_id": {
                "$dateToString": {
                    "format": "%Y-%m-%d", "date": {
                        "$toDate": "$time"
                    }
                }
            },
            "eApa": { "$avg": '$eApa' },
            "pReacTotal": { "$avg": '$pReacTotal' },
            "pAparTotal": { "$avg": '$pAparTotal' },
            "eCap": { "$avg": '$eCap' },
            "eInd": { "$avg": '$eInd' },
            "vL1": { "$avg": '$vL1' },
            "eActImp": { "$avg": '$eActImp' }
        }
    }
])
输出:

/* 1 */
{
    "_id" : "2019-08-02",
    "eApa" : 70522585.0,
    "pReacTotal" : -143988.0,
    "pAparTotal" : 196254.666666667,
    "eCap" : 44644176.8333333,
    "eInd" : 478186.0,
    "vL1" : 127.642903645833,
    "eActImp" : 41769157.3333333
}

@David Ramírez:这段代码可以根据日期获得每个指定字段的平均值!!我不明白的是,为什么会有一种准时制?你到底想在这里干什么?你能运行这个并让我知道是否需要任何更改吗..我要试试。排序聚合用于获取从最早到最新排序的数据。@DavidRamírez:根据每天从最早到最晚排序,还是在所有日期从最早到最晚排序?我指的是在2002年8月内或在日水平上进行排序的数据,即:;先是02年8月,然后是03年8月?很有效!特朗克斯。但是我需要对结果进行排序,我可以使用这个管道进行排序吗?“这是所有日子中最古老也是最晚的一天,我的意思是第一个8月2日,然后是第三个,依此类推。@DavidRamírez:你能把这个附加到聚合中::>>,{$sort:{u id:1}}在之前的$group-stage之后])并告诉我你是否看到了预期的结果!!