我有以下结构的文件:
{
_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,
}]
}
}
散列是 value 和 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 很陌生,并且挣扎着让聚合管道阶段给我任何有意义的输出。
如果您认为有更好的方法,也欢迎对构建此数据的评论。
你的结构看起来不错。如果需要,您可以删除散列value
并将其stack_trace
用作分组键。
您可以使用以下聚合。
对于$group
ing on hash
,您需要$unwind
exceptions
嵌入数组,然后是$first
保持value
和stack_trace
并$sum
计算不同的异常。
db.collection.aggregate(
{$unwind:"$data.exceptions"},
{$group:{_id:"$data.exceptions.hash", value:{$first:"$data.exceptions.value"}, stack_trace:{$first:"$data.exceptions.stack_trace"}, count:{$sum:"$data.exceptions.count"}}})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句