首页 > 解决方案 > 在 mongo db 中处理大型集合时如何优化查询?

问题描述

我正在处理 Mongo DB User 和 UserHistory 中的两个集合。其中 User 集合包含特定用户的静态信息,并且在 UserHistroy 表中,可以有与他/她的历史相关的特定用户的多条记录。我在每个集合中都有用户的用户 ID 和一组其他字段相关的值。我只想检查是否有满足这些条件的记录。

用户
-userId
-name
-type
-class

用户历史-userId
-usage
-balance
-billed_value

我有来自 User 集合的 "userId" = 'XXX'、"type" = 'YYY' 、 "class" = 'ZZZ' 和与 UserHistroy 集合相关的 "balance" = 60 值。我想知道是否有满足上述所有条件的相关用户。(最佳方式)=> 查找可能有点耗时,因为集合包含大量数据。

我正在使用 Golang 来实现这个逻辑。

标签: mongodbgo

解决方案


您可以在 $lookup 子查询中添加 $limit 以避免从UserHistory. 然后,您可以检查查找数组是否为空,以了解您的进一步逻辑。

这是一个Mongo Playground供您参考。

您还可以看到,作为常见的性能调优实践,$match 阶段被置于早期阶段,以使查询尽可能具有选择性。


推荐阅读