Mongo聚合查询:递归过多

时间:2017-08-04 20:07:55

标签: javascript mongodb recursion

在这里处理一个相当大的Mongo数据集并收集一些高级信息。

当我在我的数据集

上运行此聚合查询时
db.getCollection('collection').aggregate([
    {
        $group : {
            _id: '$d',
            counts: {
               //sum of array size across a department
              '$sum': {
                  '$size': '$dataset'
              }
            }          
        }
    },
    {$sort: { total: -1 }}
])

我在RoboMongo上得到以下回复

InternalError: too much recursion

知道Mongo内部和javascript的人是否可以向我解释查询的哪些部分正在崩溃以及我如何解决这个问题?

谢谢。

2 个答案:

答案 0 :(得分:1)

很抱歉,我会以评论的方式做到这一点,但我仍然不允许对您的问题发表评论。

我知道这是一个javascript错误。可悲的是,字面上所有类似循环的东西都可以通过mongodb内部的递归来实现。

一个问题:您是否在$ sort-stage中使用counts与$ group-stage中的字段名total不匹配?

为了追捕错误,我会尝试以下内容:

1)我尝试将各个阶段分开:你是否在没有$ sort-stage的$ group-stage中得到错误,反之亦然。
2)我尝试收集':在$ group-stage之前放一个$ match-stage左右的子集 3)我尝试使用更简单的东西替换$ size运算符(至少使用运算符,不处理数组)
4)我将$ sum-operator替换为其他group-accumulator-operator。

答案 1 :(得分:0)

发现问题。

我按总计排序,我从未定义,我认为在Mongo或RoboMongo中引用了一些奇怪的东西。

当我将其更改为按计数排序时,它完成得很好。