go mongodb排序查询_《MongoDB》day two

  1. Mongodb的更新方式有?
  2. db.集合名.update() 函数:用于更新已存在的文档。

语法格式:db.COLLECTION_NAME.update({查询条件},{更新内容},{更新参数(可选)})

注:这种方式会覆盖原有的文档。

  1. 使用更新操作符
  2. 使用 save()函数更新文档
  3. Mongodb的update更新?

db.集合名.update({key:“value”},{key:“value”})

  1. Mongodb的更新操作符有哪些 都是什么意思?

$set:更新文档(只更新指定键,不会覆盖整个文档),若该键不存在,会自动创建,并插入数据

$unset:删除指定键

$push:向文档的某个数组类型的键添加一个数组元素,不过滤重复的数据。添 加时键存在,要求键值类型必须是数组;键不存在,则创建数组类型的键

$inc:对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。

$pop 操作符:删除数据元素,给定值1表示从数组尾部删除,-1表示从数组头部删除。

$pull 操作符:从数组中删除满足条件的元素

$pullAll 操作符:从数组中删除满足条件的多个元素

$rename 操作符:对键进行重新命名。

  1. Mongodb的save()更新?

save() 方法通过传入的文档来替换已有文档。

语法格式:db.集合名.save({文档})

  1. Mongodb删除文档的三种方式?
  2. remove()函数

使用 remove()函数可删除集合中的指定文档。

语法格式:remove({指定删除条件},删除参数(可选参数))

如果使用的条件在集合中可以匹配多条数据,那么 remove()函数会删除所有满足条件的 数据。我们可以在 remove 函数中给定 justOne,表示只删除第一条,在 remove 函数中给定

注意:remove() 方法 并不会真正释放空间。需要继续执行 db.repairDatabase() 来回收 磁盘空间 参数 1 即可。

2. deleteOne()函数

deleteOne()函数是官方推荐删除文档的方法。该方法只删除满足条件的第一条文档。

3.deleteMany()函数

deleteMany 函数是官方推荐的删除方法。该方法删除满足条件的所有数据。 再次插入两条测试数据

删除集合中的所有文档 1.remove({}) 、2.deleteMany({})

  1. Mongodb如何实对文档的查询,请举例说明?

1 find()函数

在 MongoDB 中可以使用 find()函数查询文档。

语法格式为:find({查询条件(可选)},{指定投影的键(可选)}) 如果未给定参数则表示查询所有数据。

pretty()函数可以使用格式化的方式来显示所有文档。

2 findOne()函数

findOne()函数只返回满足条件的第一条数据。如果未做投影操作该方法则自带格式化功 能。

语法格式:findOne({查询条件(可选)},{投影操作(可选)})

3 模糊查询

在 MongoDB 中可以通过//与^ 、$实现模糊查询,注意使用模糊查询时查询条件不能放到 双引号或单引号中。使用^表示起始位置,使用$表示结尾位置。

  1. Mongodb中的投影操作指的是?

在 find 函数中我们可以指定投影键。

语法格式为:find({查询条件},{投影键名:1(显示该列)|0(不显示该列),投影键名:1|0,......})

_id 列默认为显示列。如果不显示_id 可在投影中通过 0 过滤

  1. 条件运算符有哪些 分别什么意思?

$gt:大于指定条件,用于数字或日期运算

$lt:小于指定条件,用于数字或日期运算

2fc0fb1e7590ae3f30788d544cbdedd8.png

$gte:大于等于指定条件,用于数字或日期运算

$lte:小于等于指定条件,用于数字或日期运算

866319a614151ec859e64b1aa2f5c7fe.png

$eq:等于指定条件,用于数字或日期运算

$ne:不等于指定条件,用于数字或日期运算

86a9bde1e9a9a7f4f8596769738061b8.png

$and:表示多条件间的并且关系

语法格式为:find({$and:[{条件一},{,条件二},.......]})

e537739b68227af5490c1e217a109753.png

注意:这种方式只能当参与判断的条件key相同时使用

4d1c3f35a15e7ba8c5054e2f06f72c0b.png

$or:表示多条件间的或者关系。

语法格式为:find({$or:[{条件一},{条件二},.....]})

85bc2f21c5eb228ec67c076ed0580fea.png

8.1and和or如何联合使用?

查询 title 为 test5 并且 size 等于 500,或者 size 小于 400 的文档。

123bc99580b8168b6691b520ff1dd009.png

$type:根据value的类型查询

562b02c8f178b98fd2e7d0171d2c8256.png
  1. 每页显示5条查看第5页的数据如何实现?

limit函数:使用 MongoDB 的 Limit 函数, limit()函数接受一个数字参数,该参数指定从 MongoDB 中读取的记录条数。

语法格式:db.COLLECTION_NAME.find().limit(NUMBER)

a35dc5fb85d7e345fe5412b7d8031507.png

skip函数:使用 skip()函数来跳过 指定数量的数据,skip 函数同样接受一个数字参数作为跳过的记录条数。

语法格式:db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

13441cd428a8a35c57cefa35265c18e0.png

实现分页显示第五页数据,每页五条:

db.dev.find({},{title:1,_id:0}).skip(25).limit(5)

注意:我们可以使用 skip 函数与 limit 函数实现 MongoDB 的分页查询,但是官方并不推荐这 样做,因为会扫描全部文档然后在返回结果,效率过低。

  1. 如何实现排序,两个条件如何排序 如年龄一致按照分数排序?

在 MongoDB 中使用 sort() 函数对查询到的文档进行排序,sort() 函数可以通过参数 指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于 降序排列。

语法格式:db.COLLECTION_NAME.find().sort({排序键:1})

f94052daa94de7789574f47c42c5558b.png
  1. 如何创建索引?

在 MongoDB 中会自动为文档中的_Id(文档的主键)键创建索引,与关系型数据的主键索 引类似。 我们可以使用 createIndex()函数来为其他的键创建索引。在创建索引时需要指定排序规 则。1 按照升序规则创建索引,-1 按照降序规则创建索引。 在创建索引时,需要使用具有 dbAdmin 或者 dbAdminAnyDatabase 角色的用户。

语法格式:db.COLLECTION_NAME.createIndex({创建索引的键:排序规则,......},{创建索 引的参数(可选参数)})

f7e55c0a91f16158eaa9c9955dae939d.png

cdfab05b901a011d69771c2a15a6ffb7.png
  1. 如何查看索引?

通过 getIndexes()或者 getIndexSpecs()函数查看集合中的所有索引信息。

语法格式:db.COLLECTION_NAME.getIndexes()

191017075abeac53092a2cf580301210.png

语法格式:db.COLLECTION_NAME.getIndexSpecs()

83bbfe2252f3c8836bfbe25ef1fadf22.png

使用db.集合名.getIndexKeys()查看集合中的索引键

8c602950fcc1e2fbf4c04ad79539eb93.png

查看索引大小:

我们可以通过 totalIndexSize()函数来查看当前集合中索引的大小,单位为字节。

语法格式:db.COLLECTION_NAME.totalIndexSize([detail](可选参数)) 参数解释:detail 可选参数,传入除 0 或 false 外的任意数据,那么会显示该集合中每个 索引的大小及集合中索引的总大小。如果传入 0 或 false 则只显示该集合中所有索引的总大 小。默认值为 false。

551fdacda0f701f146e43f40c6a08f4c.png
  1. 删除索引有几种方式,分别举例说明?

1. 删除集合中的指定索引

通过 dropIndex()函数来删除指定索引。

语法格式:db.COLLECTION_NAME.dropIndex("索引名称")。

ccc138ccab0ff0a1874fd5034a98f961.png

2. 删除集合中的全部索引

使用 dropIndexes()函数删除集合中的全部索引,_id 键的索引除外。

语法格式:db.COLLECTION_NAME.dropIndexes()

cb16f0bfd99b62a06d5401367842724f.png

注意:_id索引不会被删除掉

3.重建索引

我可以使用 reIndex()函数重建索引。重建索引可以减少索引存储空间,减少索引碎片, 优化索引查询效率。一般在数据大量变化后,会使用重建索引来提升索引性能。重建索引是 删除原索引重新创建的过程,不建议反复使用。

语法格式:db.COLLECTION_NAME.reIndex()

  1. 索引类型有哪些,有何作用?

1.单字段索引(Single Field Index)

所谓单字段索引是指在索引中只包含了一个键。查询时,可加速对该字段的各种查询请 求,是最常见的索引形式。MongoDB 默认创建的_Id 索引也是这种类型。我们可以使用 createIndexes({索引键:排序规则})函数来创建单字段索引

语法格式:db.COLLECTION_NAME.createIndexes({索引键名:排序规则})

2 交叉索引

所谓交叉索引就是为一个集合的多个字段分别建立索引,在查询的时候通过多个字段作 为查询条件,这种情况称为交叉索引。 在查询文档时,在查询条件中包含一个交叉索引键或者在一次查询中使用多个交叉索引 键作为查询条件都会触发交叉索引。

3 复合索引(Compound Index)

复合索引是 Single Field Index 的升级版本,它针对多个字段联合创建索引,先按第一个 字段排序,第一个字段相同的文档按第二个字段排序,依次类推。 语法格式:db.COLLECTION_NAME.createIndex({索引键名:排序规则, 索引键名:排序规 则,......}); 复合索引能满足的查询场景比单字段索引更丰富,不光能满足多个字段组合起来的查 询,也能满足所以能匹配符合索引前缀的查询。

4 多 key 索引 (Multikey Index)

当索引的字段为数组时,创建出的索引称为多 key 索引,多 key 索引会为数组的每个元 素建立一条索引。

语法格式:db.COLLECTION_NAME.createIndex({数组键名:排序规则});

5. 唯一索引 (unique index)

唯一索引会保证索引对应的键不会出现相同的值,比如_id 索引就是唯一索引

语法格式:db.COLLECTION_NAME.createIndex({索引键名:排序规则},{unique:true}) 如果唯一索引所在字段有重复数据写入时,抛出异常。

6.部分索引 (partial index):

部分索引是只针对符合某个特定条件的文档建立索引,3.2 版本才支持该特性。 MongoDB 部分索引只为那些在一个集合中,满足指定的筛选条件的文档创建索引。由 于部分索引是一个集合文档的一个子集,因此部分索引具有较低的存储需求,并降低了索引 创建和维护的性能成本。部分索引通过指定过滤条件来创建,可以为 MongoDB 支持的所有 索引类型使用部分索引。 简单点说:部分索引就是带有过滤条件的索引,即索引只存在与某些文档之上

语 法 格 式 : db.COLLECTION_NAME.createIndex({ 索引键名: 排 序 规 则},{partialFilterExpression:{键名:{匹配条件:条件值}}})

注意:部分索引只为集合中那些满足指定的筛选条件的文档创建索引。如果你指定的 partialFilterExpression 和唯一约束、那么唯一性约束只适用于满足筛选条件的文档。具有唯 一约束的部分索引不会阻止不符合唯一约束且不符合过滤条件的文档的插入

  1. 使用索引需要注意什么?

1.建立合适的索引

为每一个常用查询结构建立合适的索引。 复合索引是创建的索引由多个字段组成,例如: db.test.createIndex({"username":1, "age":-1}) 交叉索引是每个字段单独建立索引,但是在查询的时候组合查找,例如: db.test.createIndex({"username":1}) db.test.createIndex({"age":-1}) db.test.find({"username":"kaka", "age": 30}) 交叉索引的查询效率较低,在使用时,当查询使用到多个字段的时候,尽量使用复合索 引,而不是交叉索引

2 复合索引的字段排列顺序

当我们的组合索引内容包含匹配条件以及范围条件的时候,比如包含用户名(匹配条件)

以及年龄(范围条件),那么匹配条件应该放在范围条件之前。

3.查询时尽可能仅查询出索引字段

有时候仅需要查询少部分的字段内容,而且这部分内容刚好都建立了索引,那么尽可能 只查询出这些索引内容,需要用到的字段显式声明(_id 字段需要显式忽略!)。因为这些 数据需要把原始数据文档从磁盘读入内存,造成一定的损耗

4.对现有的数据大表建立索引的时候,采用后台运行方式

在对数据集合建立索引的过程中,数据库会停止该集合的所有读写操作,因此如果建立 索引的数据量大,建立过程慢的情况下,建议采用后台运行的方式,避免影响正常业务流程。

  1. 索引限制指的是?

1.额外开销

每个索引占据一定的存储空间,在进行插入,更新和删除操作时也需要对索引进行操作。 所以,如果你很少对集合进行读取操作,建议不使用索引。

2 内存使用

由于索引是存储在内存(RAM)中,你应该确保该索引的大小不超过内存的限制。 如果索引的大小大于内存的限制,MongoDB 会删除一些索引,这将导致性能下降。

3 查询限制

索引不能被以下的查询使用: 正则表达式(最左匹配除外)及非操作符,如 $nin, $not, 等。 算术运算符,如 $mod, 等。 所以,检测你的语句是否使用索引是一个好的习惯,可以用 explain 来查看。

4 最大范围

集合中索引不能超过 64 个 索引名的长度不能超过 128 个字符 一个复合索引最多可以有 31 个字段

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哈希表思路图解和代码实现

原文链接传送门 哈希表(散列)-Google上机题 看一个实际需求,google公司的一个上机题: 有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址…),当输入该员工的id时,要求查找到该员工的 所有信息. 要求: 不使用数据库,尽量节省内存,速度越…

glibc交叉编译_TSN之linuxptp交叉编译

0 开发环境1 linuxptp是什么2 为什么要交叉编译linuxptp3 修改makefile4 修改源码5 交叉编译0 开发环境笔记本:ubuntu18.04.5,内核版本为5.3 开发板:imx8mp-evk内核版本:Linux5.4.24交叉编译工具链:fsl-imx-xwayland-g…

声音编码

1.脉冲编码调制PCM文件格式简介 将音频数字化,其实就是将声音数字化。最常见的方式是透过脉冲编码调制PCM(Pulse Code Modulation) 。运作原理如下。首先我们考虑声音经过麦克风,转换成一连串电压变化的信号,如图一所示。这张图的横座标为秒&…

Elastic Stack简介

Elastic Stack简介 如果你没有听说过Elastic Stack,那你一定听说过ELK,实际上ELK是三款软件的简称,分别是Elasticsearch、 Logstash、Kibana组成,在发展的过程中,又有新成员Beats的加入,所以就形成了Elast…

webpack v3 结合 react-router v4 做 dynamic import — 按需加载(懒加载)

为什么要做dynamic import? dynamic import不知道为什么有很多叫法,什么按需加载,懒加载,Code Splitting,代码分页等。总之,就是在SPA,把JS代码分成N个页面份数的文件,不在用户刚进来…

go kegg_工具篇丨GO和KEGG富集不到通路?快试试这个超赞的功能分析工具吧

GO和KEGG富集分析是我们在筛选出差异表达基因之后,都会去做的套路性分析。然鹅……我相信,总有那么一些“倒霉孩子”会遇到跟我一样的窘境吧,好不容易筛选出来的差异基因,尝试了DAVID(https://david.ncifcrf.gov/)、Metascape(htt…

搭建Telnet服务器

搭建Telnet服务器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 可能大家都知道现在已经很少有人用TELNET服务器, 因为它传输数据是以明文的方式,我们很容易通过抓包软件讲数据进行抓包&a…

table取tr对象 vue_Vue笔记

Vue集成了React和Angular的优点,摒弃了他们的缺点。Vue的官网:https://cn.vuejs.org/v2/api/Vue诞生于2016年,是现在非常流行的MVVM框架。Vue提供了“引包”的使用方法,初学者可以在这之下学习语法。不需要webpack,不需…

Beats入门简介

使用Beat收集nginx日志和指标数据 项目需求 Nginx是一款非常优秀的web服务器,往往nginx服务会作为项目的访问入口,那么,nginx的性能保障就变得非常重要了,如果nginx的运行出现了问题就会对项目有较大的影响,所以&…

可编程led灯带原理_SCPSD-250-04-27派克真空压力传感器故障和工作原理

SCPSD-250-04-27派克PARKER真空压力传感器故障和工作原理PARKER压力开关现货 PARKER压力传感器特价 派克真空压力传感器 PARKER数字压力开关2020年还剩最后2天了,这一年大家都过得不太容易,尤其是我自己这是30年以来过得最艰难的一年,经…

Kibana入门安装与介绍

Kibana入门 Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化…

友善串口工具接收数据随机换行_使用Python3+PyQT5+Pyserial 实现简单的串口工具方法...

练手项目,先上图先实现一个简单的串口工具,为之后的上位机做准备代码如下:pyserial_demo.pyimport sys import serial import serial.tools.list_ports from PyQt5 import QtWidgets from PyQt5.QtWidgets import QMessageBox from PyQt5.QtC…

Vue渲染函数

前面的话 Vue 推荐在绝大多数情况下使用 template 来创建HTML。然而在一些场景中,真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接近编译器。本文将详细介绍Vue渲染函数 引入 下面是一个例子,如果要…

Logstash入门简介

Logstash入门简介 介绍 Logstash是一个开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到最喜欢的存储库中(我们的存储库当然是ElasticSearch) 我们回到我们ElasticStack的架构图&a…

Django templates 和 urls 拆分

如果在Django项目 下面新建了blog和polls两个APP应用,在每个APP下面都各自新建自己的url和templates,那么我们需要如何进行项目配置呢? INSTALLED_APPS [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, dja…

springboot怎么杀进程_线上服务平均响应时间太长,怎么排查?

线上服务平均响应时间太长,怎么排查?https://xie.infoq.cn/article/914b5c56000a3880016abd8d6前言:最近线上环境某个接口服务响应时间偏长,导致用户体验超差,那平时该怎么快速的排查这类问题呢?①、为代码…

MPEG音视频编解码之MP3编解码概述

2 MP3编解码原理 2.1 MP3音频压缩标准概述 MP3全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III)。是当今较流行的一种数字音频编码和有损压缩格式,它设计用来大幅度地降低音频数据量,而对于…

Python实现GitBook工具

写在前面 本工具是通过Python脚本实现 GitBook 自动 生成 执行 编译 发布的功能 你可以在这里下载exe 使用 1. exe下载,并移动位置 将exe文件放在你的gitbook文件夹中,或者放在空文件夹中 2. file.md 创建 名为file.md的文件,在你要写book的目录下 注意: 这里file.md文件名…

shell脚本中用到的条件和循环语句

本博文介绍一下shell脚本中常用的条件和循环语句:条件语句:循环语句:示例:if语句:eg1.eg2.2.case语句:简单的case语句:配合循环的case语句:3.for语句:简单的for语句&…

processing动态代码大全_做一张动态海报需要多少步?

人们习惯性地把程序员跟设计师分成两种不同性质的人,好像程序员就不会有美感,设计师逻辑思维就一定会很弱,但最近几年我们发现越来越多的程序员学设计,设计师学编程的跨界故事。新媒体艺术家,邱伟豪也是其中一员&#…