mongodb 使用计数在整个集合中聚合嵌套值

弗古兹

我有以下结构的文件:

{
    _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 很陌生,并且挣扎着让聚合管道阶段给我任何有意义的输出。

如果您认为有更好的方法,也欢迎对构建此数据的评论。

s7vr

你的结构看起来不错。如果需要,您可以删除散列value并将其stack_trace用作分组键。

您可以使用以下聚合。

对于$grouping on hash,您需要$unwind exceptions嵌入数组,然后是$first保持valuestack_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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章