【MongoDB学习笔记23】MongoDB的索引对象和数组
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,MongoDB允许深入文档内部,对嵌套字段和数组建立索引;嵌套对象和数组字段可以和复合索引中的顶级字段一起使用,多数情况下与"正常"索引字段的行为也是一致的。一、索引嵌套文档例如,集合中的文档如下格式
千家信息网最后更新 2026年11月03日【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安全错误
数据库的锁怎样保障安全
咖啡网
精品咖啡豆
上海睿民互联网科技有限公司
互联网科技与金融科技
互联网科技的发展
互联网与新科技
狮子座互联网科技培训
居家互联网科技有限公司
互联网公司会议桌创意科技软装饰
广州恒生互联网科技有限
互联网对科技的发展
湖南一路畅行互联网科技
搜狐科技互联网
爱医互联网络科技
互联网领先科技宣传片
领航科技大厦互联网公司
江苏互联网智能科技产品出厂价
求路客互联网科技电话
互联网科技对化妆品行业
颐高云石互联网科技
互联网科技公司介绍
美国互联网前沿科技
无锡溥仪互联网科技有限公司
宁夏众和广鑫互联网科技有限公司
苏州五指互联网络科技有限
深圳市罗太互联网科技有限公司
互联网方面的科技前沿
半导体行业属于互联网高科技类吗
银川新华互联网科技学校招聘
利用互联网等科技手段