我在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,
...
}
这看起来应该可以使用Aggregation框架,但我真的无法弄清楚如何根据“ts”的值重新投影数据数组的“kwh”元素。
有人知道怎么做吗?
感谢您的帮助!
答案 0 :(得分:1)
确实更多的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 } }
)
目前您无法灵活地指定"键"使用聚合框架。您必须通过投影明确命名每个键,以获得所需的输出。
MapReduce没有给出"确切地说"您想要的相同输出如何工作。但它是没有明确命名键的最接近的。