我有以下结构的文件:
{
_id: 123,
machine_id: 456,
data: {
some_data: 100,
exceptions: [{
hash: 789,
value: 'something',
stack_trace: 'line 123: oops',
count: 5,
}]
}
}
{
_id: 234,
machine_id: 567,
data: {
some_other_data: 200,
exceptions: [{
hash: 789,
value: 'something',
stack_trace: 'line 123: oops',
count: 1,
}, {
hash: 890,
value: 'something_else',
stack_trace: 'line 678: ouch',
count: 3,
}]
}
}
散列是值和stack_trace的组合(我特意添加了这个以尝试在整个集合中聚合异常)。我想运行一个查询,它返回每个不同的异常,以及总计数,值和堆栈跟踪。在这种情况下,结果将类似于:
[{
hash: 789,
value: 'something',
stack_trace: 'line123: oops',
count: 6,
}, {
hash: 890,
value: 'something_else',
stack_trace: 'line 678: ouch',
count: 3,
}]
我对mongoDB很新,并且为了获得任何有意义的输出而无法获得聚合管道阶段。
如果您认为有更好的方法,也欢迎有关构建此数据的评论。
答案 0 :(得分:2)
你的结构看起来很好。您可以根据需要删除哈希值,并使用value
和stack_trace
作为分组键。
您可以使用以下聚合。
对于$group
hash
,您需要$unwind
exceptions
嵌入数组,然后$first
保留value
和{ {1}}和stack_trace
不计算明显的异常。
$sum