如何将MongoDB集合中的数据聚合为Highstock系列数据格式



我有以下猫鼬模式:

// UnitDataLogSchema Schema
var UnitDataLogSchema = new mongoose.Schema({
  serialnumber: {
    type: String
  },
  timestamp: Number,
  temperatures: []
});

因此,我将获得包含以下数据的集合:

{ "_id" : 1, "timestamp": 100, "temperatures" : [1,2,3] }
{ "_id" : 1, "timestamp": 200, "temperatures" : [4,5,6] }
{ "_id" : 1, "timestamp": 300, "temperatures" : [7,8,9] }
{ "_id" : 1, "timestamp": 400, "temperatures" : [10,11,12] }
....

如何聚合此集合,以便拥有此最终对象:

{
  zonetemperatures:[
                    [ [100,1],[200,4],[300,7],[400,10] ],...
                    [ [100,2],[200,5],[300,8],[400,11] ],...
                    [ [100,3],[200,6],[300,9],[400,12] ],...
                   ]
} 

有了这个,我将有一个数组,每个元素都是 Highstock 图表中的一个系列。

我可以轻松地在图表中设置数据,如下所示:

for (let index = 0; index < zonetemperatures.length; index++) {
  chart.series[index].setData(zonetemperatures[index]);
}
chart.redraw();

我通常在前端执行数据转换,以保持后端在那里进行查询。话虽如此,前端的一个解决方案如下:

// dataCollection is a json array of data returned by your back-end
// make sure it isn't empty, wrap it in an if possibly...
var seriesLength = dataCollection[0].temperatures.length;
for(var i = 0; i < seriesLength; i++) {
    var series = [];
    for(int j = 0; j < dataCollection.length; j++)
        series.push(dataCollection[j].temperatures[i]);
    chart.series[i].setData(series);
}
chart.redraw();

试试这个。

db.unit_data.aggregate([{
        $unwind: "$temperatures"
    },
    {
        $project: {
            "zonetemperatures": ["$timestamp", "$temperatures"]
        }
    },
    {
        "$group": {
            _id: null,
            zonetemperatures: { $push: "$zonetemperatures" }
        }
    }
])

最新更新