我有一个mongoDB聚合管道,它目前以这种形式产生数据:
{ year:2014, item:'a', value:1}
{ year:2014, item:'b', value:2}
{ year:2014, item:'c', value:3}
{ year:2015, item:'a', value:2}
{ year:2015, item:'b', value:3}
{ year:2015, item:'c', value:4}
将此转换为的最佳方式是:
{year:2014, a:1, b:2, c:3}
{year:2015, a:2, b:3, c:4}
我想这可以通过map-reduce完成,但我想知道是否有人使用聚合管道进行优雅的方式。
顺便说一句,可能有数百种不同的可能项目值 - 不仅仅是我在上面的例子中使用的三个(a,b,c)。在下面使用Yathish的方法太多了。
答案 0 :(得分:1)
请试试下面的代码:
db.[collection].aggregate([
{
$project : { year : 1,
"newKey" : { "$cond" :
{ if : { "$eq" :["$item","a"] },
then : { "a" : "$value" },
else : { "$cond" :
{ if : { "$eq": ["$item","b"] },
then : {"b":"$value"},
else : { $cond :
{ if:{"$eq":["$item","c"] },
then: { "c":"$value" },
else : false
}
}
}
}
}
}
}
},
{
$group : {
_id:"$year",
newKey : { $push : "$newKey" }
}
}
]);