使用 $in 和 $nin 进行查询不使用索引

2024-04-21

当将属性与 $in 和 $nin 进行匹配时,Mongo 无法正确使用索引。

如果仅使用 $in,则索引会利用这一点:

db.assets.find({
  tags: {
    $in: ['blah']
  }
}).explain()

{
  "cursor" : "BtreeCursor tags_1",
  "isMultiKey" : true,
  "n" : 6,
  "nscannedObjects" : 6,
  "nscanned" : 6,
  "nscannedObjectsAllPlans" : 6,
  "nscannedAllPlans" : 6,
  "scanAndOrder" : false,
  "indexOnly" : false,
  "nYields" : 0,
  "nChunkSkips" : 0,
  "millis" : 0,
  "indexBounds" : {
    "tags" : [
      [ "blah", "blah" ]
    ]
  }
}

但是,如果涉及 $nin,它不会查找与 $in 匹配的文档,然后过滤掉那些不通过 $nin 条件的文档,而是扫描所有文档。

db.assets.find({
  tags: {
    $in: ['blah'],
    $nin: ['cat']
  }
}).explain()

{
  "cursor" : "BtreeCursor tags_1",
  "isMultiKey" : true,
  "n" : 75760,
  "nscannedObjects" : 79974,
  "nscanned" : 1197016,
  "nscannedObjectsAllPlans" : 79974,
  "nscannedAllPlans" : 1197130,
  "scanAndOrder" : false,
  "indexOnly" : false,
  "nYields" : 9351,
  "nChunkSkips" : 0,
  "millis" : 2331,
  "indexBounds" : {
    "tags" : [
      [ {"$minElement" : 1}, "cat" ],
      [ "cat", {"$maxElement" : 1} ]
    ]
  }
}

有没有办法欺骗 Mongo 做正确的事情?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 $in 和 $nin 进行查询不使用索引 的相关文章

随机推荐

  • 使用 Java 将包含 XML 的字符串添加到 SOAPElement

    我必须将 Excel 文件中的数据作为 XML 发送到 Web 服务 表中的数据看起来有点像这样 请参阅此处的表格示例 https i stack imgur com NEOTi png 第一行始终包含该列数据的 XML 标记 大多数数据列
  • 从intellij-idea将代码样式格式化设置导入到eclipse中

    我最近实现了将 maven Check 样式插入到我的项目中 并更改了 intellij 我使用的 中的所有格式化程序设置 以符合此样式指南 他们现在这样做 不过 我需要为 eclipse 生成一个设置 xml 文件 以便我的同事可以自动格
  • ld:警告:__DATA/__objc_imageinfo__DATA 节的大小意外地大

    有谁知道这个警告是什么意思 接下来是错误 Command Developer Platforms iPhoneSimulator platform Developer usr bin llvm gcc 4 2 failed with exi
  • 如何在嵌入式Linux中高效地在VFAT分区上创建大文件

    我正在尝试在嵌入式 Linux 盒子中使用 dd 命令在 VFAT 分区上创建一个大的空文件 dd if dev zero of mnt flash file bs 1M count 1 seek 1023 目的是跳过前 1023 个块并在
  • Nginx no-www 到 www 以及 www 到 no-www

    我在用按照教程在 Rackspace 云上安装 nginx http www howtoforge com running phpmyadmin on nginx lemp on debian squeeze ubuntu 11 04并在网
  • 无法使用 Leiningen 构建 jar

    我正在尝试使用 Intellij 的 Cursive 中的 Leiningen 插件从我的基本 Clojure 项目中制作一个独立的 jar 为了创建项目 我刚刚创建了 project clj 文件 将其打开 Cursive 提出将其导入为
  • Heroku SSL 与 Route53

    我的 SSL 证书已全部设置完毕并准备好在 Heroku 上运行 我按照这里的说明进行操作https devcenter heroku com articles route 53 https devcenter heroku com art
  • Python 子进程调用不能采用 grep [重复]

    这个问题在这里已经有答案了 Python 子进程调用应该按原样作为命令运行 但如果其中有管道 它就会抱怨 这是我的代码 usr bin python import sys import subprocess import time serv
  • 如何在预构建步骤中转义美元符号

    我正在与 Visual Studio 进行斗争 以在预构建步骤中正确转义美元符号 目标是提供一个变量名作为文字 VS 不应该尝试处理变量名 The 文档 https msdn microsoft com en us library bb38
  • Angular 子路由不起作用并将我重定向到同一页面

    我尝试过改变我的route到目前为止我没有发现任何问题 但是 如果您发现任何缺陷 请告诉我 我也会尝试查找任何类型错误并仔细检查我的组件 到目前为止我还没有找到 但请再次告诉我 我尝试输入我的路线 URL 它可以工作 但显示的是相同的页面
  • 使用 Jackson JsonFormat 模式自定义日期字符串

    Summary 我正在尝试解析日期 例如25 Sep 17因此简单日期格式 https docs oracle com javase 8 docs api java text SimpleDateFormat html注释似乎是 JsonF
  • 将标头附加到 Rspec 控制器测试

    我正在尝试为我的控制器编写测试 该控制器接收来自外部服务的请求 到目前为止 这是我的测试 describe ApplyController do context when valid do let parameters do file Fi
  • 在 Python 中使用 Selenium 进行导航并使用 BeautifulSoup 进行抓取

    好的 这就是我想要实现的目标 调用带有动态过滤搜索结果列表的 URL 点击第一个搜索结果 5 页 抓取标题 段落和图像 并将它们作为 json 对象存储在单独的文件中 例如 Title 单个条目的标题元素 Content 各个条目的 DOM
  • 自定义键盘中断处理程序

    我正在尝试编写一个简单的程序 将标准键盘中断替换为自定义的键盘中断 以减少变量 但是 如果不调用旧处理程序 它就无法工作 这是我的中断处理程序 handler proc push ax push di dec EF pushf when t
  • res.send 和 res.render 调用

    我试图确定是否可以同时调用 res send data 和 res render reports 为了进一步详细解释 当我路由到 reports 时 首先在服务器端对返回 json 数据的 API 进行 REST 调用 现在我希望在客户端上
  • 我有 12000 个已知 URL,用 Python 抓取它们的最快方法是什么?

    因此 我有一个从数据库中提取的 URL 列表 我需要抓取并解析每个 URL 的 JSON 响应 某些 URL 返回 null 而其他 URL 返回发送到 csv 文件的信息 我目前正在使用Scrapy 但是抓取这12000个URL大约需要4
  • 将 Double.NaN 与其自身进行比较

    我一直试图找出为什么这两个操作返回不同的值 Double NaN Double NaN回报false Double NaN Equals Double NaN 回报true 我有answer https stackoverflow com
  • TypeScript 中的通用类型反射

    我可以确定泛型类型吗T在以下场景中 class MyClass constructor GenericMethod
  • 当项目数等于列数时,chrome 和 safari 渲染 css 列的方式不同

    我有一个目录列表 它使用 CSS 列 但在 Chrome 和 Safari 中的行为有所不同 目录的每个部分都有一个包装器 将列表排列成两列 我已经有了 CSS 所以 Chrome 会按照我想要的方式呈现它 在 Safari 中 第二列中的
  • 使用 $in 和 $nin 进行查询不使用索引

    当将属性与 in 和 nin 进行匹配时 Mongo 无法正确使用索引 如果仅使用 in 则索引会利用这一点 db assets find tags in blah explain cursor BtreeCursor tags 1 isM