MongoDB聚合管道耗时10分钟

ffx8fchx  于 2023-04-05  发布在  Go
关注(0)|答案(1)|浏览(163)

我有两个MongoDB集合:playersstats
players集合有一些我感兴趣的数据,还有一个名为username的字段,它用于通过stats上名为username的字段引用stats集合。
我有下面的聚合管道来从players集合中获取所需的数据,这些集合具有stats集合上的数据,以及一些其他条件。

[{
        $match: {
            "username": {
                $exists: true, $ne: null, $not: {
                    $regex: "^\\s*$"
                }
            }
        }
    }, {
        $lookup: {
            from: "stats",
            localField: "username",
            foreignField: "username",
            as: "stats"
        }
    }, {
        $match: {
            stats: {
                $ne: []
            }
        }
    }, {
        $count: "count"
    }]

我面临的问题是,这在大数据集上不起作用。当我在players集合中的54 K文档和stats集合中的15 K文档的数据集上运行这个聚合管道时,执行时间大约需要10分钟,这远非理想。
有什么可能的增强功能可以在更大的数据集上实现这一任务,而不需要这么长的时间?
我也考虑过一些事情,我试着做了一个反向查找(从stats集合和players上的查找),但没有帮助。我还尝试了几个管道阶段的修改(项目,匹配阶段内的管道,分组,计数),但没有帮助。
编辑
我已经尝试了索引字段“用户名”的两个集合,这有助于让它从10分钟下降到20-25秒,但我想把它降低更多,还有什么其他建议?

41ik7eoe

41ik7eoe1#

尝试为您的集合建立索引,并尝试为经常查询的字段创建索引

相关问题