当结果集很大时,即使使用索引,mongodb.countDocuments 也会很慢

2023-11-23

mongodb.countDocuments当结果集很大时速度很慢

用户收集测试数据:

  • 1000 万个带有状态的文档'active'
  • 100k 个带有状态的文档'inactive'

status已编入索引{状态:1}

db.users.countDocuments({status: 'active'})需要 2.91 秒db.users.countDocuments({status: 'inactive'})需要 0.018 秒

我明白那个countDocuments使用聚合来查找和计算结果。

estimatedDocumentCount() 在这种情况下不起作用,因为需要查询过滤器

有什么改进建议吗?


数数seems就像那些应该很便宜但通常并不便宜的东西之一。由于 mongo 不会在其 B 树索引中维护符合特定条件的文档数量计数,因此它需要扫描索引计数文档。这意味着计算 100 倍的文档将花费 100 倍的时间,这大致就是我们在这里看到的——0.018 * 100 = 1.8s.

为了加快速度,您有以下几种选择:

  1. 活跃数量大致为estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'})。这对于您的用例来说足够准确吗?
  2. 或者,您可以维护一个counts单独集合中的文档,您可以将其与您拥有的活动/非活动文档数量保持同步。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当结果集很大时,即使使用索引,mongodb.countDocuments 也会很慢 的相关文章

随机推荐

  • Git“efrror:RPC 失败;结果 = 55,HTTP 代码 = 0”推送

    我在这个问题上花了一整天 确实需要一些帮助 当我尝试推送相对较大的提交时 Writing objects 100 21 21 908 07 KiB 0 bytes s done Total 21 delta 17 reused 0 delt
  • 在打字稿中定义常量(离子应用程序)

    在我的 Ionic 应用程序中 我将常量定义为 constants ts export var CONSTANTS API ENDPOINT http localhost 3000 并将其导入为 import CONSTANTS from
  • AWS Cloudfront 分发多语言 Angular 应用程序

    我有一个 Angular 应用程序 它存储在 AWS S3 存储桶中并由 Cloudfront 分发 现在我想以多种语言分发我的应用程序 我已经翻译了我的角度应用程序以及我构建的每种语言 所以我的 S3 存储桶如下所示 de index h
  • URL 中的“&”编码问题

    我必须向我的 iPhone 应用程序中的 Web 服务发送 https GET 请求 该应用程序是在 Swift 1 2 中开发的 我正在尝试构造查询字符串参数 但在发送到服务器之前必须对其进行编码 一切正常 但当密码包含 字符时不起作用
  • jQuery 和 Google URL 缩短 API

    我正在尝试使用以下方法缩短网址http goo gl具有以下 jQuery 函数的 API ajax url https www googleapis com urlshortener v1 url key MY API KEY cross
  • Highcharts 实心标距宽度

    我还没有找到解决改变实体仪表数据图宽度的 API 或之前的问题 我可以轻松更改图表宽度 绘图宽度 绘图填充 弧形背景的内部和外部宽度 但不能更改图表 如何防止图表 绿色 与背景 白色 重叠 刚刚创建帐户 所以还不能插入图片 https ww
  • 如何覆盖 ApplicationTagLib#createLink 和 g:link 的标准行为?

    背景 我有 grails 1 3 7 应用程序 它使用g createLink and g link在许多页面上 最近 我决定对 url 映射进行重大更改 引入前面的路径元素 目前我有 controller action id 但想要拥有
  • 为什么我不应该使用 getter 来释放 Objective-C 中的属性?

    有人告诉我StackOverflow 用户释放属性时我不应该使用 getter 方法 property nonatmic retain Type variable synthesize variable wrong self variabl
  • Python端口转发/复用服务器

    我想让服务器侦听 UDP 端口 162 SNMP 陷阱 然后将此流量转发到多个客户端 同样重要的是源端口和地址保持不变 地址欺骗 我想最好的工具是Twisted or Scapy或者也许是香草插座 只是我在 Twisted 的文档中找不到任
  • 许多 Pandas 数据框的箱线图

    我有三个数据框 包含 17 组数据 其中 A B 和 C 组 A 如以下代码片段所示 import pandas as pd import numpy as np data1 pd DataFrame np random rand 17 3
  • 使用 RsaProtectedConfigurationProvider 对 app.config 部分进行加密/解密

    在安装程序期间 我们运行此方法来加密 app config 的部分 Get the application configuration file Configuration config ConfigurationManager OpenE
  • 如何在 Entity Framework Code First 中分离对象?

    没有Detach object entity on the DbContext 我是否能够首先分离 EF 代码上的对象 这是一个选项 dbContext Entry entity State EntityState Detached
  • 用 PHP 编写合并排序

    我尝试在 PHP 中编写一个涉及小数组的基本合并排序 但问题是它需要大约一分钟左右的时间来执行 并返回 致命错误 允许的内存大小 536870912 字节已耗尽 已尝试 分配 35 个字节 在 Users web www merge php
  • 范围 ElasticSearch 聚合

    我需要在 ElasticSearch 中计算管道聚合 但我不知道如何表达它 每个文档都有一个电子邮件地址和金额 我需要输出金额计数的范围桶 并按唯一的电子邮件分组 0 99 300 100 400 100 基本上是预期的输出 密钥将在我的应
  • npm install eslint 缺少参数错误

    我正在尝试在项目文件夹中本地安装 eslint 但是按照上面提到的安装https eslint org npm install eslint save dev 返回以下错误 npm ERR Linux 4 15 0 70 generic n
  • 查看文件所有者无法使用的插座

    创建新的视图控制器时我收到以下消息 一切都在 Xcode 中编译正常 没有错误 但应用程序在从 RootViewController 加载新视图后立即退出 Terminating app due to uncaught exception
  • 窗口更新破坏了 MVC 应用程序

    我昨天运行了 Windows Update 当我尝试发布 ASP NET MVC 4 项目的新版本时 它引入了一些问题 该应用程序在本地编译并运行正常 但是当我将版本推送到网络服务器上的测试站点时 它失败并显示错误消息 System Web
  • 如何制作QheaderView多层次?

    我正在创建一个保存对象发送服务数据的应用程序 我用它创建了Qt 类型模型QStandardItemModel我想用它来显示QtableView But QtableView显示左侧的线路电平 如果可能的话 我想删除它或隐藏它 我也有一个标题
  • 无法连接到 Jenkins 服务器 (Amazon Linux AMI)

    当我在 Amazon Linux AMI 上安装 Jenkins 时 遵循中提到的步骤http bhargavamin com how to do install jenkins on amazon linux aws 安装后 我可以通过浏
  • 当结果集很大时,即使使用索引,mongodb.countDocuments 也会很慢

    mongodb countDocuments当结果集很大时速度很慢 用户收集测试数据 1000 万个带有状态的文档 active 100k 个带有状态的文档 inactive 场status已编入索引 状态 1 db users count