MongoDB(六)—-MongoDB索引的额外属性

MongoDB(六)—-MongoDB索引的额外属性

1.唯一索引

唯一索引会保证索引对应的键不会出现相同的值,比如_id索引就是唯一索引
创建索引时也需要保证属性中内容是不重复的
语法格式:

db.COLLECTION_NAME.createIndex({
   索引键名:排序规则},{
   unique:true})
db.user.createIndex({
   name:1},{
   background:true,unique:true})

2.部分索引–就是带有过滤条件的索引

部分索引是只针对符合某个特定条件的文档建立索引,3.2版本才支持该特性。
语法格式:

db.COLLECTION_NAME.createIndex({
   索引键名:排序规则},{
   partialFilterExpression:{
   键名:{
   匹配条件:条件值}}})

给年龄字段添加索引,过滤条件是年龄大于50

db.user.createIndex({
   age:1},{
   partialFilterExpression:{
   age:{
   $gt:50}}})

查看执行计划,是否用到索引

当年龄是24时,没有用到索引
db.user.find({
   age:{
   $eq:24}}).explain()
   "winningPlan": {
   
            "stage": "COLLSCAN",
            "filter": {
   
                "age": {
   
                    "$eq": 24
                }
            },
            "direction": "forward"
        },
 当年龄是54时,用到了索引
  "inputStage": {
   
                "stage": "IXSCAN",
                "keyPattern": {
   
                    "age": 1
                },
                "indexName": "age_1",
                "isMultiKey": false,
                "multiKeyPaths": {
   
                    "age": [ ]
                },

3.稀疏索引

稀疏索引仅包含具有索引字段的文档的条目,即使索引字段包含空值也是如此。索引会跳过缺少索引字段的任何文档。索引是“稀疏的”,因为它不包含集合的所有文档。相反,非稀疏索引包含集合中的所有文档,为那些不包含索引字段的文档存储空值。
语法格式:

db.COLLECTION_NAME.createIndex({
   索引键名:排序规则},{
   sparse:true})

注意:从MongoDB 3.2开始,MongoDB提供了创建部分索引的选项 。部分索引提供了稀疏索引功能的超集。如果您使用的是MongoDB 3.2或更高版本,则部分索引应优先于稀疏索引。

4.覆盖索引查询

官方的MongoDB的文档中说明,覆盖查询是以下的查询:
1.所有的查询字段是索引的一部分

2.所有的查询返回字段在同一个索引中
由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引 的查询结果。
因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取数据要快得多。
如有如下索引:
db.stu.createIndex({title:1,:size:1})
那么执行如下查询时,该索引会覆盖查询:
db.stu.find({title:“dev”},{size:1,_id:0})
也就是说,对于上述查询,MongoDB的不会去数据库文件中查找。相反,它会从索引中提取数据,这是非常快速的数据查询。

5.查询计划

在MongoDB中通过explain()函数启动执行计划,我们可以使用查询计划分析索引的使用情况,可通过查看详细的查询计划来决定如何优化。
语法结构:db.COLLECTION_NAME.find().explain()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2319.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 小程序 flex_fly app

    小程序 flex_fly appflyio的使用在小程序中使用请求,只能使用原生的wx.request,如果想要向axios一样使用三方包,只能使用flyio,不然会报错,同时flyio是属于多种兼容的可以放心使用到多端。importFlyfrom’flyio/dist/npm/wx’constfly=newFly()consthost=process.env.NODE_ENV===”development”?”模拟地址”:”真实地址”fly.config.baseURL=hostfly.c

    2025年10月2日
    3
  • xshell连接虚拟机ssh服务器拒绝了密码_finalshell连接不上虚拟机centos

    xshell连接虚拟机ssh服务器拒绝了密码_finalshell连接不上虚拟机centos以下来自博客:xshell连接虚拟机Connectionfailed-金虹巴巴-博客园(cnblogs.com)一、问题描述:xshell连接不了虚拟机,出现错误提示:Couldnotconnectto’192.168.1.100′(port22):Connectionfailed.二、查找错误原因:1、登录虚拟机,打开终端,切换到root用户,输入systemctlstartsshd.service看能否开启sshd服务,提示开启失败,输入system.

    2022年9月22日
    3
  • linux修改密码的方法_linux密码正确无法登录

    linux修改密码的方法_linux密码正确无法登录情景:Linux服务器上用户的密码被服务器管理员发现太过简单,需要重置密码。处理时为了方便记忆,就直接使用普通用户登录,修改密码时,在原密码的基础上增加一串特定的数字,结果提示不通过。例如出现错误提示”BADPASSWORD:itisbasedonyourusername”。网罗相应的资料得知:1、使用管理员帐号root怎么设置都可以,可以不受验证机制的约束。2、普通用户修改自己…

    2025年9月22日
    4
  • sstream头文件

    sstream头文件之前的sscanf和sprintfsscanf函数原型为intsscanf(constchar*str,constchar*format,…),将参数str的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内;#include<iostream>#include<cstdio>usingnamespacestd;i…

    2022年6月4日
    51
  • java爬虫系列(一)——爬虫入门[通俗易懂]

    java爬虫系列(一)——爬虫入门[通俗易懂]爬虫框架介绍Heritrix优势劣势简单demo地址crawler4j优势劣势简单demo地址WebMagic优势劣势简单demo地址快速入门seimicrawler项目地址简单爬虫实现导入项目编写爬虫启动爬虫同系列文章爬虫框架介绍java爬虫框架非常多,比如较早的有Heritrix,轻量级的crawler4j…

    2022年7月8日
    21
  • php对接亿乐社区,亿乐社区对接教程

    php对接亿乐社区,亿乐社区对接教程###:-:**亿乐社区**###1、打开网站网站:[http://www.124sq.cn/](http://www.124sq.cn/)有账号的直接登录,没有账号的注册一个###2、选择商品ID在左侧目录栏选一个,这里选择的是`刷名片赞专区`,然后选择一个商品点开![](https://img.kancloud.cn/b3/9f/b39f76546ed13c86ab2153247bc…

    2022年8月13日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号