【发布时间】:2012-11-22 23:20:58
【问题描述】:
是否可以跨多列按值分组?
假设我每天存储人们之间的互动,并使用如下计数来跟踪 from's 和 to's。
db.collection =
[
{ from : 'bob', to : 'mary', day : 1, count : 2 },
{ from : 'bob', to : 'steve', day : 2, count : 1 },
{ from : 'mary', to : 'bob', day : 1, count : 3 },
{ from : 'mary', to : 'steve', day : 3, count : 1 },
{ from : 'steve', to : 'bob', day : 2, count : 2 },
{ from : 'steve', to : 'mary', day : 1, count : 1 }
]
这使我可以通过对from: 进行分组并对count: 求和来获得'bob' 与任何人的所有交互。
现在我想获得用户的所有交互,所以基本上按 from: 和 to: 的值分组。本质上,为每个名字总结count:,不管它是在from:还是to:
[更新]
期望的输出是:
[
{ name : 'bob', count : 8 },
{ name : 'mary', count : 7 },
{ name : 'steve', count : 3 }
]
最简单的方法是创建一个新列names: 并在其中存储from: 和to:,然后是$unwind,但这似乎很浪费。
有什么提示吗?
谢谢
【问题讨论】:
-
谢谢。用示例输出更新了我的问题。
-
首先,应该是 name: 'steve', count: 5 在所需的输出中,对吗?您可以在聚合框架中执行此操作而无需更改架构(虽然它并不漂亮)。
标签: mongodb aggregation-framework