【MongoDB学习笔记23】MongoDB的索引对象和数组
发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,MongoDB允许深入文档内部,对嵌套字段和数组建立索引;嵌套对象和数组字段可以和复合索引中的顶级字段一起使用,多数情况下与"正常"索引字段的行为也是一致的。一、索引嵌套文档例如,集合中的文档如下格式
千家信息网最后更新 2024年11月14日【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安全错误
数据库的锁怎样保障安全
ss服务器 管理
oswp网络安全宣传周
深圳服务器提供商哪家好
上海市徐汇网络安全
笔记本的服务器管理在哪
阿里云 创建数据库
提取数据库密码
计算机网络技术复试问题
中国前沿的软件开发公司
数据库文件自动变化
法律法规数据库检索去哪了
steam买东西服务器连接失败
什么软件开发岗位不出差
软件开发市场趋势分析预测
记者探馆网络安全教育
两个配置好的服务器赚钱吗
敏捷软件开发过程
wordpress服务器
网络安全实训平台如何架构
国家网络安全周标语
滨州库存软件开发
东莞市一橙网络技术怎么样
自学c语言能做软件开发吗
公共图书馆网络数据库
存货软件开发定制研发价格
数据库应用系统包括哪两个
惠普数据库错误怎么解决
记者探馆网络安全教育
木链科技互联网
软件开发比例 前端后端区别