首页 > 解决方案 > 为什么要为一个字段创建复合索引?

问题描述

我在 MongoDB 中有一个用户集合,我想为电子邮件字段创建索引,我在 MongoDB Compass 中通过指定“在后台构建索引”参数来执行此操作,但是当我这样做时,会创建一个复合索引: 在此处输入图像描述 示例文档:

{
  "_id":{
    "$oid":"6060d34aaf85dd1071ca6406"
  },
  "email":"example@mail.com",
  "password":"somehash",
  "role":"admin",
  "state":true,
  "createdAt":{
    "date":{
      "$date":"2021-02-08T19:13:59.399Z"
    },
    "timestamp":1612811639.399607
  },
  "extraData":{
    "jwt":"somejwt",
    "language":"en"
  }
}

只有一个电子邮件字段,为什么要创建复合?
而且我是否理解正确,如果我在数据库中有很多读写操作,我需要在后台构建所有索引?

标签: mongodb

解决方案


这是因为text即使您只指定一个键,索引类型也是复合索引。

如果您为同一个键应用普通索引,它将显示为常规索引。

如果您希望在构建索引时不影响所有读/写操作,则必须使用该background: true选项。但是,这会消耗更多的时间。


推荐阅读