当前位置: 首页 > 知识库问答 >
问题:

MongoDB索引的基本误区

甄文彬
2023-03-14

因此,我从[MongoDB Docs][1]中阅读了以下索引定义。

索引是一种特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分。索引存储特定字段或一组字段的值,按字段的值排序。索引条目的排序支持高效的等式匹配和基于范围的查询操作。此外,MongoDB可以使用索引中的排序返回排序后的结果。

我有一个示例数据库,其中包含一个名为pets的集合。宠物有如下结构。

{
    "_id": ObjectId(123abc123abc)
    "name": "My pet's name"
}

我使用以下代码在name字段上创建了一个索引。

db.pets.createIndex({"name":1})
db.pets.find({},{"_id":0})

相反,它会按照插入宠物的顺序返回宠物。我的结论是,我对指数的工作原理缺乏基本的了解。有人能帮我弄明白吗?

共有1个答案

杨骏
2023-03-14

是的,这是对索引如何工作的误解。

索引不会改变查询的输出,但会改变数据库引擎处理查询的方式。因此db.pets.find({},{“_id”:0})将始终按自然顺序返回文档,而不管是否有索引。

只有在查询中使用索引时才会使用索引。因此,db.pets.find({name:“my pet's name”},{“_id”:0})db.pets.find({},{_id:0}).sort({name:1})将使用{name:1}索引。

您应该对查询运行explain以检查是否正在使用索引。

您可能需要参考有关索引工作方式的文档。https://docs.mongodb.com/manual/indexes/
https://docs.mongodb.com/manual/tutorial/sort-results-with-indexes/

 类似资料:
  • 本文向大家介绍MongoDB的索引,包括了MongoDB的索引的使用技巧和注意事项,需要的朋友参考一下 1、简介 它就像是一本书的目录,如果没有它,我们就需要对整个书籍进行查找来获取需要的结果,即所说的全盘扫描; 而有了目录(索引)之后就可以通过它帮我们定位到目标所在的位置,快速的获取我们想要的结果。 2、演示 第一步,向用户集合users中插入100W条数据 LZ的渣渣I3和4G内存总共耗时了4

  • 主要内容:createIndex() 方法,dropIndex() 方法,dropIndexes() 方法,getIndexes() 方法索引是特殊的数据结构,存储在一个方便遍历和读取的数据集合中。索引在任何数据库中都非常重要,通过使用索引,可以大大提高查询语句的执行效率。 举个简单的例子,假如您有一个集合,其中包含了数千甚至上万个没有索引的文档,当我们在集合中查找某个文档时,MongoDB 需要扫描整个集合来寻找所需的文档,这种扫描效率极低,特别是在处理大量的数据时,可能需要花费几十秒甚至几分

  • 主要内容:索引数组字段,索引子文档字段假如在 users 集合中插入以下文档: 在上面的文档中包含了一个名为 address 的子文档和一个名为 tags 的数组。 索引数组字段 假设要想根据集合内 tags 字段中的某个值来搜索用户文档,就需要我们为集合中的 tags 字段创建索引。想要在数组类型的字段上创建索引,需要为数组中的每个字段依次创建单独的索引。 在下面的示例中,当我们在 tags 字段上创建索引时,MongoDB 会自动

  • 问题内容: 以下是我在模型中的架构- 这就是我在控制器中使用它的方式- 这就是我将其保存在数据库中的方式- 错误 - 我检查了数据库集合,没有这样的重复条目,让我知道我在做什么错吗? 仅供参考- 和被获取的值。 我也检查了这篇文章,但没有帮助STACK LINK 如果我将其完全删除,则它将插入文档,否则即使我在local.email中有条目,也会引发错误“ Duplicate”错误 问题答案: 错

  • 问题内容: 在稀疏索引文档中,我发现了有关mongodb 3.2部分索引的说明 在版本3.2中进行了更改:从MongoDB 3.2开始,MongoDB提供了创建部分索引的选项。部分索引提供了稀疏索引功能的超集。如果您使用的是MongoDB 3.2或更高版本,则应优先使用部分索引而不是稀疏索引。 部分索引非常有用,我想在项目中使用它们。可以和猫鼬一起使用吗? 问题答案: 在当前的Mongoose版本

  • 我的集合中有两个数组(一个是嵌入式文档,另一个只是字符串的简单集合)。文档,例如: 由于一些查询将仅包含策略,而一些查询将包含标签和参与者数组,并且考虑到我无法创建具有两个数组的多键索引这一事实,我认为使用索引交叉点将是一个经典场景。 我正在执行一个查询,但我看不到交叉点。 以下是索引: 以下是查询: 这是解释的结果: 查询中的每个标记(tag1、tag-2和tag-3)都有10K个文档。每个策略