【MongoDB学习笔记23】MongoDB的索引对象和数组
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,MongoDB允许深入文档内部,对嵌套字段和数组建立索引;嵌套对象和数组字段可以和复合索引中的顶级字段一起使用,多数情况下与"正常"索引字段的行为也是一致的。一、索引嵌套文档例如,集合中的文档如下格式
千家信息网最后更新 2025年02月01日【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安全错误
数据库的锁怎样保障安全
数据库创建1个别名
哈尔滨 软件开发公司
湛江手机软件开发
首选dns的服务器地址怎么设置
网络安全典型算法
nt数据库教程
猎杀对决服务器全部占用原因
服务器 单核 双核
企业网络安全典型案例
北极星服务器文件损坏
市橙社网络技术有限公司
小学手网络安全抄报设计
软件开发与程序设计有何不同
网络安全数学不好可以学吗
华为网络安全工程师待遇
服务器端用什么软件管理硬盘
金属服务器安全吗
软件开发经济效益
软件开发委托合同 管辖法院
襄阳互联网科技公司
时时网络技术有限公司梁良
青岛微信小程序软件开发
obs 流媒体服务器
数据库数据导入导出的常见故障
java 检查数据库连接
软件开发的阶段文档
hp刀片服务器图标
黄浦区信息软件开发质量
网络安全考研考哪个学校
db2新建数据库用户