mongodb - 在 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 来实现这个逻辑。
解决方案
您可以在 $lookup 子查询中添加 $limit 以避免从UserHistory
. 然后,您可以检查查找数组是否为空,以了解您的进一步逻辑。
这是一个Mongo Playground供您参考。
您还可以看到,作为常见的性能调优实践,$match 阶段被置于早期阶段,以使查询尽可能具有选择性。
推荐阅读
- sql - 对于具有不同 id 的相同类型的记录,更新/连接一个列值与另一个列值
- pyspark - PySpark:使用 Split 和 withColumn 将具有不同字符标记的 DF 列拆分为另一列
- segmentation-fault - fork() 内部崩溃;从不同的线程分叉消除了崩溃
- go - Golang - 按值锁定
- python - 为每个组创建计算行差异的列
- dns - 软件产品公司的领域(参考领域驱动设计)是什么?
- sql - 试图匹配 PostgreSQL 中两个不同表中的两个地址列。想不通
- python - 从二维数组中删除线后的索引错误
- reactjs - 是否可以使用 single-spa (import map + SystemJS) 并包含 TypeScript 声明?
- php - php imap,从 iphone 发送的附有照片的电子邮件给出了奇怪的代码