mongodb - 为什么要为一个字段创建复合索引?
问题描述
我在 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"
}
}
只有一个电子邮件字段,为什么要创建复合?
而且我是否理解正确,如果我在数据库中有很多读写操作,我需要在后台构建所有索引?
解决方案
这是因为text
即使您只指定一个键,索引类型也是复合索引。
如果您为同一个键应用普通索引,它将显示为常规索引。
如果您希望在构建索引时不影响所有读/写操作,则必须使用该background: true
选项。但是,这会消耗更多的时间。
推荐阅读
- floating-point - 流行的浮点二和算法问题
- sql - 如何在 SQL 的 Guid 列中设置默认值?
- php - How to transfer data from DB1 to DB2 (different network/server)
- spring-boot - Problem with registering multiple instances of Zuul with Eureka. Port gets registerd as 0
- javascript - 我需要使用 underscore.js 旋转数组的矩阵元素。我有解决方案,但代码很大我想缩短它吗?
- c++ - cmake + cpp:没有这样的文件或目录
- javascript - 使用箭头键在网格布局中移动元素
- validation - 空白没有从颤动的字符串中删除
- java - 如何在 html 页面中使用 Java for 循环
- android - java.lang.IndexOutOfBoundsException ERROR don't know how to solve