6
我有以下类型的文档存储在一个集合中。MongoDB聚合:组合两个数组
{
"_id" : "318036:2014010100",
"data": [
{"flow": [6, 10, 12], "occupancy": [0.0356, 0.06, 0.0856], time: 0},
{"flow": [2, 1, 4], "occupancy": [0.01, 0.0056, 0.0422], time: 30},
...
]
}
我想计算流量和占用数组中第一,第二,...,第n个值的聚合值。数组中的顺序应该保留。假设我想计算总和。结果应该如下所示:
{
"_id" : "318036:2014010100",
"data": [
{"flow": [6, 10, 12], "occupancy": [0.0356, 0.06, 0.0856], sum: [6.0356, 10.006, 12.00856], time: 0},
{"flow": [2, 1, 4], "occupancy": [0.01, 0.0056, 0.0422], sum: [2.01, 1.0056, 4.0422], time: 30},
...
]
}
我试图通过使用聚合框架,但我目前的做法不保留排序来解决这个并产生得多款项。
db.sens.aggregate([
{$match: {"_id":/^318036:/}},
{$limit: 1},
{$unwind: "$data"},
{$unwind: "$data.flow"},
{$unwind: "$data.occupancy"},
{
$group: {
_id: {id: "$_id", time: "$data.time", o: "$data.occupancy", f: "$data.flow", s: {$add: ["$data.occupancy", "$data.flow"]}}
}
},
{
$group: {
_id: {id: "$_id.id", time: "$_id.time"}, occ: { $addToSet: "$_id.o"}, flow: {$addToSet: "$_id.f"}, speed: {$addToSet: "$_id.s"}
}
}
])
我不知道是否有可能解决这一问题与聚合框架,所以使用的MapReduce解决方案也将被罚款。我怎样才能产生想要的结果?
我相信这https://jira.mongodb.org/browse/SERVER-5919防止您与聚合框架解决问题。另一方面,完全可以通过缩小地图来完成。 – joao 2014-10-07 10:25:02
我个人对于你期望的结果感到有些莫名其妙。 “套件”没有订购。首席技术官这样说,这基本上是一个通用的数学原理。 “$ group”上的“双泵”并不是必须的,因为它可以在一个阶段完成。这基本上可以让我回到“你想达到什么”的结果给你的原始输入?似乎没有明确说明。 – 2014-10-07 10:37:33
我不相信在2.6汇总框架中有办法做到这一点。考虑map/reduce或客户端(预)处理。 – wdberkeley 2014-10-07 15:13:40