【问题标题】:MongoDB covered query on embedded documentMongoDB 涵盖了对嵌入式文档的查询
【发布时间】:2016-09-09 18:50:55
【问题描述】:

我正在学习 MongoDB 中的索引

我的示例架构是:

  1. 姓名
  2. 位置
    • 街道
    • 号码

我在namelocation.number 上创建了两个索引。 当我输入时

db.table.find({ 'name': 'Steve' }, { _id: 0, 'name': 1 }).explain('executionStats')

我得到了覆盖查询,但是当我输入时

db.table.find({ 'location.number': 46 }, { _id: 0, 'location.number': 1 }).explain('executionStats')

totalDocsExamined 不等于 0,所以它没有被覆盖查询。为什么?该查询仅包含一个字段,该字段具有索引,并且排除了 _id 与第一个查询相同。涵盖的查询不适用于嵌入式文档?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    不,他们不是。是very well documented restriction:

    如果查询谓词中的任何索引字段或投影中返回的任何索引字段是嵌入文档中的字段,则索引无法覆盖查询。

    【讨论】:

    • 从 MongoDB 3.6 开始,子文档字段可以包含在覆盖索引中。 Changed in version 3.6: An index can cover a query on fields within embedded documents.
    【解决方案2】:

    Alex Blex 答案中的引用文本不再出现在链接的站点中。我仍然不使用我管理的数据进行自己的研究,但我认为现在这可能是可能的。

    根据新文档:

    在 3.6 版中更改:索引可以覆盖对内部字段的查询 嵌入文档。

    3.6 版是 2017 年 11 月的 released,因此绝对是 OP 制作日期的新功能。

    有关更多示例,请参阅the docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 2021-08-07
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      相关资源
      最近更新 更多