建立常用的mongo索引

mongo3.2 数组索引作为联合索引的一部分导致的范围查询问题 摘要在mongo索引一文中有介绍过mongo数组索引,这边主要介绍在mongo3.2中遇到的一个将array字段作为一个联合索引的字段,然后进行非array字段的范围查询遇到的问题。问题post collection{ "_id" : ObjectId("5972c7b0a98a215bd51b9f9a"), "son" : [ 1, 2 阅读详情

建立索引方式

1. 是在schema定义字段时
2. 通过index方法给schema添加
3. db.modle.creatIndex({filed: 1}) mongo shell添加索引

索引属性

1. index: 布尔值 是否对这个属性创建索引
2. unique: 布尔值 是否对这个属性创建唯一索引
3. sparse: 布尔值 是否对这个属性创建稀疏索引
4. partialFilterExpression object 对这个属性进行部分索引

索引类型(6种常用)

1. 单字段索引

对于单字段索引,升序/降序效果是一样
在这里插入图片描述

2. 唯一索引

保证索引对应的字段不会出现相同的值,比如_id索引就是唯一索引
除了唯一约束之外,唯一索引在功能上可与其他MongoDB索引互换。

在这里插入图片描述

3. 复合索引

**多个字段上定义索引,即 复合索引

查询需求

应用场景: 为经常需要根据『name字段』以及『name和age字段组合』来查询
在这里插入图片描述
复合索引中字段的排序很重要 userSchema.index( {name: 1, age: 1} )

  1. 先按第一个字段name排序,第一个字段相同的文档按第二个字段age排序,依次类推。
  2. 不光能满足多个字段组合起来的查询,也能满足所以能匹配符合索引前缀(这里前缀为{name:1} ) 的查寻,即db.user.find( {age: 18} ) 的查询也能通过该索引来加速。
    注: 复合索引和升降序的爱恨情仇
    在这里插入图片描述

4. 多key索引

这个主要是针对数据类型为数组的类型 ):(shell)
在这里插入图片描述

5.部分索引

仅索引符合指定过滤表达式的集合中的文档(较低的存储要求,并降低了索引创建和维护的性能成本)

要创建partial索引,请将db.collection.createIndex()方法与partialFilterExpression(部分涮选条件)选项一起使用。 partialFilterExpression选项接受使用以下内容指定过滤条件的文档:

  1. 等式表达式(field: value或使用$eq operator),
  2. $exists:true表达,
  3. g t , gt, gt,gte, l t , lt, lt,lte表达式
    例子:(shell)
    在这里插入图片描述

Schema设置索引

const UsersSchema = new Schema({
  name: {type: String, trim: true, index: true, required: true},
  email: {
    type: String, trim: true, index: {
      unique: true,
      partialFilterExpression: {email: {$type: 'string'}}
    }
  }
})

6. 稀疏索引

索引会跳过缺少索引字段的任何文档。配合唯一索引使用,即可实现对存在的字段才使用唯一索引。

要创建稀疏索引,请将db.collection.createIndex()方法与sparse(稀疏,搭配unique)选项一起使用

应用场景

同时支持手机号和邮箱,用户可能使用手机号注册,则邮箱为null。而唯一索引对于会认为null 也是重复的数据。导致手机号加入到数据库中失败。这些对于可选但也应该是唯一的字段特别有用
例子:(shell)

Schema.index( { email:  1 }, { sparse: true, unique: true } );

建立索引注意事项

  1. 索引列颗粒越小越好(索引列中每个数据的重复数量称为颗粒,也叫作索引的基数)
  2. 在建立索引时要尽量将数据颗粒小的列放在索引左侧,以保证索引发挥最大的作用。(颗粒小的数据放左边,大的放右边,查询速度更加快)
  3. MongoDB在复合索引中是根据prefix (前缀) 排序查询,就是说排在前面的可以单独使用。
  4. 通常MongoDB会自动为我们的文档插入’_id’ field,且已经按照升序(小->大)1 进行索引,如果我们插入的文档中包含有’_id’ field,则MongoDB就不会自动创建’_id’ field,需要我们保证唯一性从而唯一标识一个文档。
  5. MongoDB 提供db.collection.explain(), cursort.explain()及explain 命令获取查询计划及查询计划执行统计信息。
mongo索引中的顺序 我们在使用mongo中可能并未使用排序,但在查询出来数据自动排好序了,或者我们需要使用mongo的自动排序完成一些功能。 1、当无索引的情况下的查询 db.mongoTest2.find({"valueStr2":"nihao2"}); 2、创建索引 db.mongoTest2.ensureIndex({ "valueStr2" : 1, "time" : -1 }, {"name" : "test3_index"}, {"background" : true }); 3、使用索引后的排序 db 阅读详情

相关推荐

mongo中的索引

一、mongo中的索引 为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样适用于其他的数据库比如mysql)。 mongo-9552:PRIMARY> db.person.find() { "_id" : ObjectId("571b5da31b0d530a03b3ce82"), "name" : "jack", "age" : 19 } { "_id" : ObjectId("571b5dae1

GengJL 3915

MongoDB进阶篇-索引(索引概述、索引的类型、索引相关操作、索引的使用)

MongoDB进阶篇-索引(索引概述、索引的类型、索引相关操作、索引的使用)

聂可以的博客 4432

微信小程序后台定位与实时位置更新的实战指南

本文提供了微信小程序实现后台定位与实时位置更新的完整实战指南。针对小程序退到后台后位置更新中断的痛点,详细解析了基于`startLocationUpdateBackground`API的后台定位解决方案。内容涵盖从隐私协议配置、项目权限声明,到授权、启动、监听、停止的核心代码流程,并分享了真机调试、性能优化及权限引导等关键避坑经验,帮助开发者构建稳定可靠的后台位置服务。

weixin_29008055的博客 473

mongo索引

不同于MySQL的索引,mongo的索引是有方向的,value代表了索引的方向,这个特性在排序的使用很好用。就能查看是否使用了索引,以及其他的一些详细信息,包括,使用的索引,扫描的文档数据,结果的数量,查询用时等等。如此我们就建立了一个唯一索引,当然类似MySQL的联合唯一索引mongo也是有的,只需要指定多个字段即可。索引好用,但是切记复合索引是有顺序排列的,如果将查询字段顺序写错,是不会使用索引的哈!需要注意的是,如果集合中包含多个待索引字段是数组,则无法创建复合多键索引。...

乾复道 4663

微生物16S数据上传NCBI的SRA库

本篇内容仅包括:俺自己的实验收集了淡水、淡水沉积物、海水、海草附着微生物样品,测序所得的Fastq格式数据,在文章投稿发表时被要求数据需上传NCBI的SRA库,得到一个PRJNA2347899这样子的IDs。仅解决了这个上传过程!

Xf_Niu的博客 7436

移动端抓包实战指南:从HTTPS解密到QUIC协议与证书绑定破解

HTTPS作为保障网络通信安全的核心协议,其工作原理基于TLS/SSL加密与证书信任链验证。在移动应用开发与测试中,抓包是调试接口、分析性能、排查问题的关键技术手段。然而,随着移动端安全性的提升,传统的代理抓包方法常因证书绑定、HTTP/3/QUIC协议等挑战而失效。这要求开发者掌握分层诊断思维,协同使用代理工具、协议分析工具及底层流量捕获工具。例如,面对证书绑定导致的流量不可见,需借助Wireshark进行协议层分析;针对基于UDP的QUIC协议,则需使用支持该协议的抓包工具或临时禁用特性。本文聚焦移动端

weixin_27722377的博客 299

MongoDB索引

本文是对MongoDB的学习,先认识了MongoDB的数据存储结构和索引数据结构,又学习了如何创建、查看、删除索引,最后深入学习了索引的多种类型和属性。之后的学习内容将持续更新!!!

qq15035899256的博客 2828

过压保护电路(OVP)

作者:AirCity 2020.2.4 Aircity007@sina.com 本文所有权归作者Aircity所有 1 示例一 当VBUS=5V时,各点电压电流如图所示,Q1接近截止,输出信号是5V。 当VBUS=5.4V开始,输出信号开始下降,直到VBUS=6.1V,输出信号降低为0.6V。 下面是实测波形,这个电路,输出信号的电压不会超过5.4V,这个输出信号可用于电源的控制信号。 2 ...

AirCity123的博客 3万+

MongoDB索引简介与使用

MongoDB索引简介与使用

snow_adfe的博客 3360

记一次完整的RPG Maker MV游戏逆向过程(思路一)

了解RPG Maker MV的文件建构 上一篇文章,我们已经成功在PC上运行了游戏,那我们如何对游戏进行逆向呢? 首先要了解正常的RPG Maker MV制作的游戏应该具有哪些文件,以及他的结构 那如何了解他的结构呢,很简单,我们只需要用RPG Maker MV创建一个默认工程,来看看一个游戏的最简结构是怎么样的 创建新项目 项目创建完成 查看项目目录结构 是不是和之前解包出来的很像呢? 通...

Ciiiiiing的博客 1万+

SoC设计中的RDC陷阱:如何避免异步复位导致的亚稳态问题

本文深入探讨了SoC设计中由异步复位引发的复位域交叉(RDC)陷阱及其导致的亚稳态风险。通过分析实际案例,文章系统性地提出了以同步复位优先、异步复位同步释放为核心的设计原则,并介绍了电路级加固与验证策略,为构建稳健的SoC复位架构提供了实用指南。

weixin_29280657的博客 421

MongoDB索引Index

什么是索引 索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。索引目标是提高数据库的查询效率,没有索引的话,查询会进行全表扫描(scan every document in a collection),数据量大时严重降低了查询效率。默认情况下Mongo在一个集合(collection)创建时,自动地对集合的_id创建了唯一索引 索引

小城我家 2087

Swin Transformer 类可视化(grad CAM)

完整代码 from pytorch_grad_cam import GradCAM, ScoreCAM, GradCAMPlusPlus, AblationCAM, XGradCAM, EigenCAM from pytorch_grad_cam.utils.image import show_cam_on_image from torchvision.models import resnet50 import glob from demo import parse_option from models i

G果的博客 6639

java dbcursor_Java操作MongoDB

1.首先介绍一下比较常用的几个类Mongo:连接服务器,执行一些数据库操作的选项,如新建立一个数据库等DB:对应一个数据库,可以用来建立集合等操作DBCollection:对应一个集合(类似表),可能是我们用得最多的,可以添加删除记录等DBObjec:接口和BasicDBObject对象:表示一个具体的记录,BasicDBObject实现了DBObject,因为是key-value的数据结构,所以...

weixin_42530570的博客 1196

概念解析 | 事件相机的原理 (含仿真代码)

在我们熟悉的世界里,传统相机就像一个勤勉的绘画师,每隔固定的时间就为我们勾勒出一幅完整的画面。但是,大自然中有太多瞬息万变的精彩场景,这种"定时绘画"的方式往往难以捕捉。于是,一种全新的"观察者"应运而生 -事件相机(Event Camera)。事件相机,就像是一群极其敏感的"像素哨兵",它们不再按部就班地等待指令,而是主动感知周围的变化,只有在光线强度发生显著变化时才会发出信号。这种革命性的设计,让事件相机拥有了传统相机难以企及的优势:超高的时间分辨率、极低的延迟、宽广的动态范围,以及出色的能效比。

NLOS的博客 1423

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Mongo索引

输出结果如下。

weixin_45541397的博客 1004

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

mongo索引性能

mongo索引性能 标签(空格分隔): mongo https://www.cnblogs.com/c-abc/p/6023824.html 测试mongo索引性能 有索引,每个值都是唯一值 "executionStats" : { "executionSuccess" : true, "nReturned" : 1, ...

jiangzhenkang的博客 737

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

mongo 索引总结

索引基础知识 什么是索引 索引最常用的比喻就是书籍的目录,查询索引就像查询一本书的目录。本质上目录是将书中一小部分内容信息(比如题目)和内容的位置信息(页码)共同构成,而由于信息量小(只有题目),所以我们可以很快找到我们想要的信息片段,再根据页码找到相应的内容。同样索引也是只保留某个域的一部分信息(建立了索引的field的信息),以及对应的文档的位置信息。 假设我们有如下文档(每行的数据在Mo...

xiaoliuliu2050的专栏 697

【mongoDB实战】mongo对某个键添加索引

索引就是用来加速查询的.数据库索引与书籍的索引类似:有了索引就不需要翻遍整本书.数据库则可以直接在索引中查找,使得查找速度能提高几个数量级.在索引中找到条目以后,就可以直接跳转到目标文档的位置.在mongo中建立索引则是需要对查询的条件进行分析.例如:所有的查询条件中,都包括"date"键,那么很可能需要建立一个关于"data"的索引.有时候花费数分钟的查询,不如建立适当的索引可能会即刻完成. 通过以下试验查看建立索引和没有建立索引所用时间的对比.

陈晓婵 4864

[953]mongo创建索引及索引相关方法

文章目录MongoDB 索引索引的类型和属性createIndex() 方法来创建索引1、单键索引①普通单键索引②索引子文档字段(或者"内嵌索引")③唯一索引2、复合索引3、多键值索引(或者"数组索引")4、过期索引(TTL)5、哈希索引(Hashed Index)6、地理位置索引(Geospatial Index)7、文本索引(Text Index)索引操作方法1、查看现有索引2、列出数据库的所有索引3、删除索引4、重建索引5、创建索引的参数索引规则1、查询优化器2、何时查询计划缓存才会变呢?3、联合索引

周小董 3798

mongodb index 的background 及集群的索引建立

在数据库建立索引时,默认时"foreground" 也就是前台建立索引,但是,当你的数据库数据量很大时,在建立索引的时会读取数据文件,大量的文件读写会阻止其他的操作,此时在建立索引的时候用background:true,虽然,background在可以在后台建立索引。 在后台建立索引的时候,不能对建立索引的collection进行一些坏灭型的操作,如:运行repairDatabase,...

ddxto80286的专栏 5829

mongo索引浅析

索引是一种用来方便查询数据的数据结构B Tree就是一种常用的数据库索引数据结构,MongoDB采用 B 树做索引,索引创建在colletions 上。我们可以在这个网站上直观的看到索引的效果。

m0_37322399的博客 1188

mongo数据库索引原理

索引的本质 索引(Index)是帮助数据库高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。 现在的数据库(mongo,mysql等)索引多采用B-Tree数据结构

u012939368的博客 1万+

MongoDB 建立与删除索引

1.1 在独立服务器上面建立索引 在独立服务器上面创建索引,可以在空闲时间于后台建立索引。 在后台建立索引,可利用background:true参数运行 >db.foo.ensureIndex({"somefield":1,{:background":true}) 1、任何类型的索引均可在后台完成建立 2、前台建立索引耗时少,但是索引建立期间会锁定数据库,导致其他操作无法...

weixin_30329623的博客 1020

mongo 各种索引的用法

mongo 各种索引的用法 索引的创建,删除 db.records.createIndex( { score: 1 } ) 这里score指定是1 , 意思是按照score进行asc排序, 如果是-1, 测试desc排序. 2. 创建组合索引: db.collection.createIndex( { : , : , ... } 3.获取当前集合的索引

qq_32239417的博客 1182
上一篇: anyproxy(实现app抓包)
下一篇: mongoose实现mongo表关联(populate)
蛮吉(lambda)
博客等级 码龄7年 2粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值