我有两个MongoDB集合:players
和stats
。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秒,但我想把它降低更多,还有什么其他建议?
1条答案
按热度按时间41ik7eoe1#
尝试为您的集合建立索引,并尝试为经常查询的字段创建索引