【问题标题】:How to optimize your query when you are dealing with large collections in mongo db?在 mongodb 中处理大型集合时如何优化查询?
【发布时间】:2020-12-15 17:27:27
【问题描述】:

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

用户
-userId
-名称
-类型
-类

用户历史
-userId
-用法
-平衡
-billed_value

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

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

【问题讨论】:

  • 使用indexes 加快查询速度。

标签: mongodb go


【解决方案1】:

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

这里有一个Mongo Playground 供您参考。

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

【讨论】:

    【解决方案2】:

    可以尝试使用游标选项,通过查询“userId” = 'XXX'、“type” = 'YYY'、“class” = 'ZZZ' 从“User”中获取第一个过滤集 然后使用 userid 或 _id ,使用 "balance" = 60 查询 "UserHistory"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-11
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 2021-09-03
      • 1970-01-01
      相关资源
      最近更新 更多