我是MongoDB 2.6.0,我有这样的文档集合:
{ "mid" : 1021,
"day" : 298,
"data":[
{"ts" : 1,"kwh" : 0.017},
{"ts" : 2,"kwh" : 0.018},
{"ts" : 3,"kwh" : 0.019},
... ] }
我想把数组元素平铺成单独的字段,像这样:
{ "mid" : 1021,
"day" : 298,
"ts1" : 0.017,
"ts2" : 0.018,
"ts3" : 0.019,
...
}
这看起来应该是可能的聚合框架,但我真的不知道如何根据"ts"的值重新投影数据数组的"kwh"元素。
有人知道怎么做吗?
谢谢你的帮助!
更多的mapReduce任务:
db.collection.mapReduce(
function () {
var copy = this;
var tdata = copy.data;
delete copy.data;
tdata.forEach(function(data) {
var key = "ts" + data.ts;
copy[key] = data.kwh;
});
var id = copy._id;
delete copy["_id"];
emit( id, copy );
},
function(){},
{ "out": { "inline": 1 } }
)
目前还不能使用聚合框架灵活地指定"key"的值。为了得到想要的输出,您必须通过投影显式地命名每个键。
MapReduce并没有给出与你想要的完全相同的输出。但这是在不显式命名键的情况下最接近的。