MongoDB:将数组元素转换为字段

MongoDB:将数组元素转换为字段,mongodb,mapreduce,aggregation-framework,Mongodb,Mapreduce,Aggregation Framework,我在MongoDB 2.6.0上,我收集了如下文档: {“mid”:1021, “日”:298, “数据”:[ {“ts”:1,“kwh”:0.017}, {“ts”:2,“kwh”:0.018}, {“ts”:3,“kwh”:0.019}, ... ] } 我想将数组元素展平为单独的字段,如下所示: {“mid”:1021, “日”:298, “ts1”:0.017, “ts2”:0.018, “ts3”:0.019, ... } 这看起来在聚合框架中应该是可能的,但我真的不知道如何根据“

我在MongoDB 2.6.0上,我收集了如下文档:

{“mid”:1021,
“日”:298,
“数据”:[
{“ts”:1,“kwh”:0.017},
{“ts”:2,“kwh”:0.018},
{“ts”:3,“kwh”:0.019},
... ] }
我想将数组元素展平为单独的字段,如下所示:

{“mid”:1021,
“日”:298,
“ts1”:0.017,
“ts2”:0.018,
“ts3”:0.019,
...
}
这看起来在聚合框架中应该是可能的,但我真的不知道如何根据“ts”的值重新投影数据数组的“kwh”元素

有人知道怎么做吗


谢谢你的帮助

更多的mapReduce任务实际上:

db.collection.mapReduce(
函数(){
var copy=this;
var tdata=copy.data;
删除复制数据;
tdata.forEach(函数(数据){
var key=“ts”+data.ts;
复制[键]=data.kwh;
});
var id=副本。\u id;
删除副本[“_id”];
发出(id,副本);
},
函数(){},
{“out”:{“inline”:1}
)
目前,您无法使用聚合框架灵活地指定“键”的值。为了获得所需的输出,您必须通过投影显式地命名每个键


MapReduce不会提供与您想要的工作方式“完全”相同的输出。但它是在不显式命名键的情况下最接近的

你确定要这样做吗?当您保持数据数组结构时,大多数查询将更容易执行。这里可能不清楚。你真的想从数组数据中得到平均值吗?