【MongoDB学习笔记23】MongoDB的索引对象和数组
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,MongoDB允许深入文档内部,对嵌套字段和数组建立索引;嵌套对象和数组字段可以和复合索引中的顶级字段一起使用,多数情况下与"正常"索引字段的行为也是一致的。一、索引嵌套文档例如,集合中的文档如下格式
千家信息网最后更新 2025年11月15日【MongoDB学习笔记23】MongoDB的索引对象和数组
MongoDB允许深入文档内部,对嵌套字段和数组建立索引;嵌套对象和数组字段可以和复合索引中的顶级字段一起使用,多数情况下与"正常"索引字段的行为也是一致的。
一、索引嵌套文档
例如,集合中的文档如下格式,
> db.post.findOne({"username":"sid"}) { "_id" : ObjectId("54aff7f43bd1048e7b585e39"), "username" : "sid", "loc" : { "ip" : "1.2.3.4", "city" : "springfield", "state" : "ny" } } >需要在"loc"的city上建立索引来提高这个loc.city字段的查询速度:
> db.post.ensureIndex({"loc.city":1}) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } >利用这种方式可以建立任意深度的索引,例如可以在X.Y.Z.A.B.C上建立索引。
但是,针对子文档"loc"上建立的索引,和建立在子文档的某个字段"loc.city"上的索引是不同的:
(1)对整个子文档上建立的索引,只会提高整个子文档的的查询速度;也就是说只有在完全匹配子文档的查询(包括字段顺序),子文档索引才会起作用;
(2)只有查询loc.city字段,索引loc.city才会起作用,其他情况索引loc.city不起作用;
二、数组上的索引
(1)可以看得出在数组字段上建立索引的代价比较大,因为每次的删除,更新都会对每一个索引进行刷新,太消耗服务器的资源;
(2)可以针对数组字段中的某一个元素做具体的单独索引,减少索引的数量;例如,在数组字段comments中的第九个元素中的votes上建立索引:
> db.post.ensureIndex({"comment.10.votes":1})同样,只有精确匹配comment.10.votes查询,上述索引才会起到索引的作用。
三、多键索引
如果在数组字段上创建索引,那么这个索引称为多键索引( multikey)。
多键索引用explain函数中可以看到"isMultikey"字段的值为true,多键索引比非多键索引要慢一些;
索引
字段
文档
数组
查询
作用
只有
个子
元素
情况
速度
对象
不同
精确
一致
也就是
也就是说
代价
函数
和数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
lol账号服务器地址
怎么用手机管理服务器
云服务器的安全是要注意的
山西线上生鲜配送软件开发
阿里云服务器 登录
网络安全审查方法有哪些
linux网络安全管理
网络技术 应用层协议
知克莱网络技术有限公司
网络安全的认识与措施
linux邮箱内部服务器
运城多媒体软件开发公司
软件开发做到60岁
ui好 还是软件开发好
江西网络技术学院在哪里
组态屏软件开发优缺点
湛江旅游软件开发咨询
php文件上传服务器
网络技术和网络安全的区别
互联网企业与科技企业的区别
idea软件开发界面
临沂app软件开发公司排名
网络安全基础图书
六年级网络安全教案上册
两台服务器冗余设置
毕业设计论文网络安全设计
服务器容易受到什么类型的攻击
武汉千途软件开发有限公司
七格互联网科技公司怎么样
web不连接数据库登录密码