我有以下猫鼬模式:
// 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();
答案 0 :(得分:0)
我通常在前端执行数据转换,以便将后端保留在那里进行查询。话虽如此,前端的一个解决方案如下:
// 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();
答案 1 :(得分:0)
试试这个..
db.unit_data.aggregate([{
$unwind: "$temperatures"
},
{
$project: {
"zonetemperatures": ["$timestamp", "$temperatures"]
}
},
{
"$group": {
_id: null,
zonetemperatures: { $push: "$zonetemperatures" }
}
}
])