当前位置: 首页 > news >正文

网站优化排名哪家好提升学历的学校

网站优化排名哪家好,提升学历的学校,陕西找人做网站多少钱,中企动力做的网站容易SEO吗学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第93篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第93篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。

Mongodb为提高数组的查询效率,针对数组构建了多键索引。而Mongodb在应用多键数组查询时,也通过构建,减少数组查询的数值范围,来提高查询性能。本文结合Mongodb官方文档,阐述Mongodb在使用多键索引时的边界优化。

概述

索引边界定义了索引值的区间段。Mongodb在查询时,用这个区间段来查询索引中的数据。当用户针对索引字段指定多个查询条件时,mongdb尝试合并这些查询条件的区间范围来计算出更小的范围区间,来获得更快的查询速度并减少资源利用。

使用多键索引的边界交集来查询

边界交集代表多个边界相互重合的点。如有两个区间[3, 无穷大]和[无穷小,6],这两个区间的交集就是[3,6]。Mongodb将这种求交集的方式,应用到数据查询当中。有一个构建了索引的数组字段,当使用$elemMatch指定多个查询条件查询数据时,Mongodb会将查询条件合并。下边的例子,说明了这种查询优化方法。

构建结合students并插入数据

db.students.insertMany([{_id: 1, name: 'Shawn', grades: [70,85]},{_id: 2, name: 'Elena', grades: [92, 84]}
])

为数组创建多键索引

db.students.createIndex({grades: 1})

构建查询语句

db.students.find( { grades: { $elemMatch: { $gte: 90, $lte:99 } } } )

这个语句中,只要数组中任何一个数据符合大于等于90,小于等于99的数据。

单独分析每个查询条件,第一个边界是[90,无穷大],第二个边界是[无穷小,99],在使用$elemMatch时,mongodb先计算两个边界的交集[90,99]

当不使用$elemMatch时,Mongodb不会先计算边界的交集。

db.students.find( { grades: { $gte: 90, $lte:99 } }  )

该查询会查询出满足下面两个条件的文档

  • 数组grades中至少有一个元素大于等于90
  • 数组grades中至少有一个元素小于等于99

因为没有使用$elemMatch, Mongodb不会计算边界的交集。而是使用两个边界中的任何一个来查找,不能保证使用哪一个条件。

从解释计划当中也能看出来两者查询数据范围的不同

db.students.find( { grades: { $elemMatch: { $gte: 90, $lte:99 } } } ).explain()db.students.find( { grades: { $gte: 90, $lte:99 } }  ).explain()

下面两张图片中,左边使用了$elemMatch, 右侧没有使用

复合多键索引边界混合

复合边界集合了复合多键索引中的边界。使用复合多键索引的多个字段边界值,能够减少查询时间。Mongodb不需要单独计算每个边界的查询结果。如符合索引{temperature: 1, humidity: 1}有下面的两个边界

  • 温度[80, 无穷大]
  • 湿度[无穷小,20]

则计算出来的复合边界就是

{ temperature: [80, 无穷大], humidity: [无穷小,20]}

如果mongodb不能将这两个边界混合,mongodb只能够使用前面的字段索引来查询数据。在这个例子中,前面的字段是temperature。下面的应用,详细描述了mongodb在复合多键索引中的边界混合。

非数组字段和数组字段的边界混合

这个例子展示了mongodb通过混合边界来定义更高效的查询约束提高性能

构建survey集合并插入数据

db.survey.insertMany([{ _id: 1, item: "abc", ratings: [ 2, 5, 8 ] },{ _id: 2, item: "xyz", ratings: [ 5, 8 ] }
])

创建复合多键索引

db.survey.createIndex({item: 1, ratings: 1})

构建查询语句

db.survey.find({item: "abc", ratings: { $gte: 3}})

直接看执行计划,会更清楚一些

该查询使用字段item和数组字段rating进行查找。单独来看么一个查询条件

item字段值是“abc”, mongodb在执行时,转换为边界["abc", "abc"]

rating边界是{$gte: 3},转换为[3,无穷大]

mongodb将两个边界组合进行查询

非数组字段和多个数组字段的边界混合

下面的例子展现了mongodb怎样将非数组字段和多个数组字段的边界混合

构建集合survey2并插入数据

db.survey2.insertMany([{ _id: 1, item: "abc", ratings: [ { score: 2, by: "mn"}, { score: 9, by: "anon"}] },{ _id: 2, item: "xyz", ratings: [  { score: 5, by: "anon"}, { score: 7, by: "wv"}] }
])

为集合添加符合多键索引

db.survey2.createIndex({item: 1, "ratings.score": 1, "ratings.by": 1})

构建查询语句

db.surver2.find({item: "xyz", "ratings.score": { $lte: 5}, "ratings.by": "anon"})

单独看每个查询条件

  • item字段的边界 item: "xyz", 转换为[["xyz", "xyz"]]
  • score的边界是{$lte:5},转换为[无穷小, 5],
  • by的边界是 by: "anon",转换为["anon", "anon"]

Mongodb 将item的边界和ratings.score或ratings.by当中的一个边界混合,取决于查询操作符和索引值。当mongodb不能确认使用哪个边界来进行混合。执行计划也无法确定使用哪个索引来进行查询。

为了保证mongodb能够将文档数组中的边界混合,必须使用$elemMatch操作符

混合相同数组中多个字段的边界

为了能够混合相同数组中多个字段的索引边界,必须满足下面两个条件

  • 除了字段名称以外,索引键必须在相同的路径上
  • 查询语句必须使用$elemMatch查询相同路径上的值

在嵌入式文档数组中,使用点操作符的字段名称,如“a.b.c.d”, 就是字段d的字段路径。为了能够混合相同数组中的多个边界,$elemMatch必须在这个路径上,并且不包含字段本身。如“a.b.c”

在前面创建的集合survey2中添加索引

db.surver2.createIndex({"ratings.score": 1, "ratings.by": 1})

构建查询语句, 使用$elemMatch操作符查询ratings字段,查询出满足两个条件的数据。

db.surver2.find({ratings: {$elemMatch: {score: {$lte: 5}, by: "anon"}}})

看查询计划,能够看到mongodb混合了两个边界为一个边界

http://www.yayakq.cn/news/525148/

相关文章:

  • 怎么做网站关键字搜索上海市工程建设咨询监理有限公司
  • 网站建设+开源辛集哪做网站
  • 易企秀 旗下 网站建设找人搭建网站多少钱
  • 采集数据做网站广州开发公司
  • 随州网站建设哪家优惠seo网站诊断方案
  • 上海专业建网站长沙网站seo报价
  • 网站建设礼品网站策划方案
  • 做淘宝优惠券怎么有网站wordpress自定义背景
  • 做网站的细节湛江网站设计
  • 设计风格网站欣赏桂林东西巷美食
  • wordpress 下载站插件东莞网络外包公司
  • 电子产品网站建设模板阳谷做网站推广
  • 广西建设厅网站是什么seo培训教程视频
  • 专做国外商品的网站单页式网站
  • 空间站与空间站组合体交会对接化工材料 技术支持 东莞网站建设
  • 上海设计网站如何用qq使用wordpress
  • vs 2017网站开发php网站开发钱包
  • 南京做企业网站的公司建设app下载官网
  • 太原定制网站制作流程想给公司做个网站 怎么做
  • 金融理财网站建设网站优化的目的
  • 惠州网站建设系统邢台网络招聘
  • 网站权重如何合理分配页面设计作品
  • 邹平建设项目网站公示企业网站建设时优化关键词的问题
  • 网站ie兼容性差网站建设开发语言和使用工具
  • 京东当前网站做的营销活动dw怎样制作网页
  • dedecms调取友情链接 网站类型宁夏银川冰面出现人脸
  • 网站提供哪些服务做网站优化的
  • 网站建设丿金手指下拉9免费的软件下载大全安装
  • 做sorry动图的网站英语培训机构前十名
  • 网站建设属于营业范围里的哪一项打开网站后直接做跳转页面吗