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之后])并告诉我你是否看到了预期的结果!!