MongoDB实验——在MongoDB集合中查找文档

在MongoDB集合中查找文档

  • 一、实验目的
  • 二、实验原理
  • 三、实验步骤
    • 1.启动MongoDB数据库、启动MongoDB Shell客户端
    • 2.数据准备-->person.json
    • 3.指定返回的键
    • 4 .包含或不包含 i n 或 in 或 innin、$elemMatch(匹配数组)
    • 5.OR 查询 $or
    • 6.Null、$exists
    • 7.正则查询 $regex
    • 8.$not 的使用
    • 9.数组查询$all 和 index 应用
    • 10.查询指定长度数组$size,它不能与比较查询符一起使用
    • 11.查询出喜欢的书籍数量大于 4 本的学生
    • 12.利用shell查询出Jim喜欢看的书的数量
    • 13.在当前数据库 persons1 集合中中添加以下文档信息:
    • 14.$slice 操作符返回文档中指定数组的内部值
    • 15.嵌套文档查询
    • 16.分页和排序
    • 17.游标
    • 18.Count函数——计数
    • 19.Distinct函数——去重
    • 20.嵌套文档查询

一、实验目的

1.掌握在 MongoDB中查询文档操作

2.掌握查找单个文档、多个文档、使用查询运算符根据字段值查找文档,根据子文档查找文档的方法

二、实验原理

MongoDB 支持多种复杂的查询方式,能实现大多数 T-SQL 功能,远不是 Key-Value 之类的 NoSQL DB 所能比拟的。

Conditional Operator : $lt <, $lte <=, $gt >, $gte >=

Conditional Operator : $ne //不等于

Conditional Operator : $in //属于

Conditional Operator : $nin //不属于

Conditional Operator : $mod //取模运算

Conditional Operator : $all //全部属于

Conditional Operator : $size //数量

Conditional Operator : $exists //字段存在

Conditional Operator : $or // 或

Regular Expressions //正则表达式

Value in an Array // 数组中的值

Conditional Operator : $elemMatch //要素符合

Meta operator: $not //不是

Conditional Operators : $slice //切片

Javascript Expressions and $where //

sort() //排序

limit() //限制取数据条数

skip() //跳过一定数值开始取

count() // 数量

group() //分组

三、实验步骤

1.启动MongoDB数据库、启动MongoDB Shell客户端

image-20221022123759142

2.数据准备–>person.json

2.1切换到 xscj 数据库,Shell 端执行以下脚本:实现在 xscj 数据库中,添加 persons 集合,并增加11条学生信息。

image-20221022124930007

image-20221022125211221

image-20221022125248813

image-20221022125259136

2.2查询persons集合中的所有文档信息

image-20221022125458669

2.3查询persons集合中的所有文档信息(规整查找结果的格式)——节选一部分

image-20221022125651427

3.指定返回的键

格式为:db.[documentName].find({条件},{键指定})

3.1查询出所有学生的name、age和country信息

image-20221022143902494

3.2查询出年龄在 25 到 27 岁之间的学生姓名。

image-20221022144255953

3.3查询出所有不是韩国籍的学生的数学成绩,结果显示姓名和数学成绩。

image-20221022144821648

4 .包含或不包含 i n 或 in 或 innin、$elemMatch(匹配数组)

4.1查询国籍是中国或美国的学生信息

image-20221022145317558

4.2查询国籍不是中国或美国的学生信息

image-20221022145916721

4.3查询出满足数组中指定条件的文档

步骤一:在当前数据库中添加数据到 scores 集合中{_id: 1, results: [82,85,88] },{ _id: 2, results: [75,88,89]}

image-20221022150403666

步骤二:查询 89<=results<95 的文档

image-20221022150857612

5.OR 查询 $or

查询语文成绩大于 85 或者英语大于 90 的学生信息,结果显示学生姓名,语文成绩和英语成绩。

image-20221022151345562

6.Null、$exists

  1. 1把中国国籍的学生上增加新的键 sex

image-20221022151455835

6.2查询出sex等于null的学生

image-20221022151703800

6.3查询集合中包含sex键的文档

image-20221022151930056

6.4查询集合中不包含sex键的文档

image-20221022152127598

7.正则查询 $regex

正则表达式对象:{ <field>: /pattern/<options> };

$regex 为模糊查询的字符串提供正则表达式功能。

7.1查询出名字中存在”li”的学生的信息

image-20221022152306833

7.2分析以下查询实现的操作,在当前数据库 xs 集合中录入实例数据检验其功能。

`> db.xs.find({name:{$in:[/^joe/i,/^jack/}})

`> db.xs.find({name:{$regex:/^zh/i, $nin:["zhang"]}})

`> db.xs.find({email:{$regex:/@qq./,$options:"i"}})

```> db.xs.find({name:{$regex:/^zh/}})`

`> db.xs.find({name:{$regex:/c/}})

8.$not 的使用

$not 可以用到任何地方进行取反操作。

查询出名字中不存在”li”的学生的信息。

image-20221022152704589

n o t 和 not 和 notnin 的区别是 n o t 可以用在任何地方,而 not 可以用在任何地方,而 not可以用在任何地方,而nin 用到集合上。

9.数组查询$all 和 index 应用

9.1查询喜欢看MONGODB和JS的学生

image-20221022153323897

9.2 查询第二本书是 JAVA 的学习信息

image-20221022153248989

10.查询指定长度数组$size,它不能与比较查询符一起使用

查询出喜欢的书籍数量是 4 本的学生

image-20221022153459931

11.查询出喜欢的书籍数量大于 4 本的学生

  1. 1增加字段 size

image-20221022153650957

11.2改变书籍的更新方式,每次增加书籍的时候 size 增加 1

image-20221022154023913

11.3利用$gt 查询: 喜欢的书籍数量大于4 本的学生

image-20221022154336922

12.利用shell查询出Jim喜欢看的书的数量

image-20221022154819291

13.在当前数据库 persons1 集合中中添加以下文档信息:

{ _id:1,

members:[{name:“BuleRiver1”,age:27,gender:“M”},

{name:“BuleRiver2”, age:23, gender:“F”},

{name:“BuleRiver3”, age:21, gender:“M”}]

}

image-20221022154943814

查看数据是否正确存储到数据库?

image-20221022155110782

查询是否存在 name 为"BuleRiver1"并且 age 为 27 的成员。使用多种方式尝试查询:(分 析哪种查询可以得到正确结果)

> db.persons1.find({members:{name:“BuleRiver1”}}) //数组元素中的键值一部分

> db.persons1.find({members:{age:27,name:“BuleRiver1”,gender:“M”}})

//把键值颠倒

> db.persons1.find({members:{name:“BuleRiver1”,age:27,gender:“M”}})

//完全匹配数组中的键值

> db.persons1.find({“members.name”:“BuleRiver1”})

> db.persons1.find({“members.name”:“BuleRiver1”,“members.age”:27})

//数组第 1 个元素的键值完全一致

> db.persons1.find({“members.name”:“BuleRiver1”,“members.age”:23})

//数组第 1、2 个元素的部分键值的组合

使用$elemMatch 操作符查询

> db.persons1.find({members:{$elemMatch:{name:“BuleRiver1”,age:27}}})

//$elemMatch+同一个元素中的键值组合

> db.persons1.find({members:{$elemMatch:{name:“BuleRiver1”,age:23}}})

//$elemMatch+不同元素中的键值组合

14.$slice 操作符返回文档中指定数组的内部值

14.1查询出Jim书架中第2~4本书

image-20221022155426260

14.2查询出最后一本书,注意查询结果同时显示姓名和图书

image-20221022155712313

14.3$slice 值设置为 2 或-2,分析查询结果

image-20221022155805870

15.嵌套文档查询

为 zhangsan 添加学习简历文档 zhangsanschoool.json。

文档内容:

image-20221022160116414

image-20221022160144361

15.1查询出在 school1 上过学的且成绩为“A”学生

image-20221022160301300

15.2查询出在 school1 上过学的且成绩为“B”学生

image-20221022160406408

15.3查询年龄大于 22 岁,喜欢看 C++书,在 school1 学校上过学的学生信息

db.persons.find( 
{"school.school":“school1",“books":{$in:[“C++”],”age”:{$gt:22}},{_id:0,name:1}}) 

16.分页和排序

16.1分页 前几条数据limit()

查询persons中的前5条数据

image-20221022161459748

16.2前跨度数据——skip()

查询persons中的前6~8共三条数据,即前面5条省略跳过

image-20221022161638212

16.3排序——sort()

查询 persons 集合中的前三行数据,只显示姓名和年龄,根据 name 升序排序,-1 为倒序

image-20221022161713989

image-20221022161728920

17.游标

查询学生集合中的所有文档

> var p = db.persons.find(); //得到游标

> while(p.hasNext()){ //遍历游标

> obj = p.next(); //指向下一条记录

> print(obj); //输出

>}

image-20221022161933383

18.Count函数——计数

查询美国国籍的人数

image-20221022162052053

19.Distinct函数——去重

查询 persons 集合中一共有多少个国家,分别是什么

image-20221022162223771

20.嵌套文档查询

查询在“school1”学校上过学的学生

image-20221022162413372

注意:通过”.”连接集合 baseinf 和字段,并用双引号实现指定嵌套文档的查询

查询在“school1”学校上过学且成绩为”A”的学生,查询结果只显示学生姓名

image-20221022162441197

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

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

相关文章

简易虚拟培训系统-UI控件的应用1

目录 前言 UI结构总体介绍 建立初步的系统UI结构 Image控件 前言 前面的文章介绍了关于Oculus设备与UI控件的关联&#xff0c;从本文开始采用小示例的方式介绍基本的UI控件在系统中的基本作用&#xff08;仅介绍“基本作用”&#xff0c;详细的API教程可参考官方文档&#x…

用wireshark流量分析的四个案例

目录 第一题 1 2 3 4 第二题 1 2 3. 第三题 1 2 第四题 1 2 3 第一题 题目&#xff1a; 1.黑客攻击的第一个受害主机的网卡IP地址 2.黑客对URL的哪一个参数实施了SQL注入 3.第一个受害主机网站数据库的表前缀&#xff08;加上下划线例如abc&#xff09; 4.…

2024毕业设计选题指南【附选题大全】

title: 毕业设计选题指南 - 如何选择合适的毕业设计题目 date: 2023-08-29 categories: 毕业设计 tags: 选题指南, 毕业设计, 毕业论文, 毕业项目 - 如何选择合适的毕业设计题目 当我们站在大学生活的十字路口&#xff0c;毕业设计便成了我们面临的一项重要使命。这不仅是对我们…

文本编辑器Vim常用操作和技巧

文章目录 1. Vim常用操作1.1 Vim简介1.2 Vim工作模式1.3 插入命令1.4 定位命令1.5 删除命令1.6 复制和剪切命令1.7 替换和取消命令1.8 搜索和搜索替换命令1.9 保存和退出命令 2. Vim使用技巧 1. Vim常用操作 1.1 Vim简介 Vim是一个功能强大的全屏幕文本编辑器&#xff0c;是L…

计算机竞赛 基于机器视觉的手势检测和识别算法

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng…

今天学了二叉树的前序,中序和后序遍历oier

同时了解一些趣图笑死我了 所以想入门先入坟&#xff0c;这是最好的礼物。 废话说多了&#xff0c;谈谈正事&#xff0c;我们了解到二叉树有节点和边权&#xff1b;分为有向和无向图&#xff1b;这里如果我们需要搜索一下每一个节点的情况&#xff0c;所以就需要这个遍历了 1…

前端vue2、vue3去掉url路由“ # ”号——nginx配置

文章目录 ⭐前言⭐vue2中router默认出现#号&#x1f496;在vue2项目中去掉&#x1f496;在vue3项目中去掉 ⭐vue打包 assetsPublicPath base 为绝对路径 /&#x1f496;vue2 配置 assetsPublicPath&#x1f496;vue3 配置 base&#x1f496;验证 ⭐nginx 配置&#x1f496; 使用…

Leetcode Top 100 Liked Questions(序号105~139)

105. Construct Binary Tree from Preorder and Inorder Traversal105. Construct Binary Tree from Preorder and Inorder Traversal 题意&#xff1a;根据前序遍历和中序遍历来构造二叉树 我的思路 要用递归造树&#xff0c;要同时递归左子树和右子树&#xff0c;造树需要…

C语言每日一练-----Day(4)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;记负均正    旋转数组的最小数字    二分查找 &#x1f493;博主…

剑指offer(C++)-JZ29:顺时针打印矩阵(算法-模拟)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字&#xff0c;例如&#xff0c;…

element Collapse 折叠面板 绑定事件

1. 点击面板触发事件 change <el-collapse accordion v-model"activeNames" change"handleChange"><el-collapse-item title"一致性 Consistency"><div>与现实生活一致&#xff1a;与现实生活的流程、逻辑保持一致&#xff0c…

使用Python构建网络爬虫:提取网页内容和图片资源

网络爬虫是一种自动获取网页内容的程序&#xff0c;它可以帮助我们高效地收集网络上的有价值信息。本文将介绍如何使用Python构建网络爬虫&#xff0c;提取网页内容和图片资源。   一、环境准备   1.安装Python环境   首先&#xff0c;确保您已经安装了Python环境。访问P…

2021年06月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;数字变换 给定一个包含5个数字&#xff08;0-9&#xff09;的字符串&#xff0c;例如 “02943”&#xff0c;请将“12345”变换到它。 你可以采取3种操作进行变换 &#xff08;1&#xff09;交换相邻的两个数字 &#xff08;2&#xff09;将一个数字加1。如果…

Qt应用开发(基础篇)——进度条 QProgressBar

一、前言 QProgressBar类继承于QWidget&#xff0c;是一个提供了横向或者纵向进度条的小部件。 QProgressBar进度条一般用来显示用户某操作的进度&#xff0c;比如烧录、导入、导出、下发、上传、加载等这些需要耗时和分包的概念&#xff0c;让用户知道程序还在正常的执行中。 …

Git操作

Git 操作方法 Git 是一个分布式版本控制系统&#xff0c;用于管理项目的源代码。 gitee新建仓库提示如下 具体介绍看下面 1. 创建仓库 初始化本地仓库 使用以下命令在本地目录中初始化一个新的 Git 仓库&#xff1a; git init克隆远程仓库 使用以下命令克隆一个远程仓库…

java自动登录 selenium 自动登录并获取cookie

选择操作网页 我用的edge&#xff0c;谷歌我的版本太高没有对应的驱动… 下载Edge的驱动程序&#xff0c;直接解压就好里面只有一个.exe文件 https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ 复制即用&#xff0c;看注释 import com.alibaba.fastjs…

我们的第一个 Qt 窗口程序

Qt 入门实战教程&#xff08;目录&#xff09; Windows Qt 5.12.10下载与安装 为何使用Qt Creator开发QT 本文介绍用Qt自带的集成开发工具Qt Creator创建Qt默认的窗口程序。 本文不需要你另外安装Visual Studio 2022这样的集成开发环境&#xff0c;也不需要你再在Visual St…

Redis.conf 配置文件详解

1、units 单位 配置大小单位&#xff0c;开头定义了一些基本的度量单位&#xff0c;只支持 bytes&#xff0c;不支持bit&#xff0c;并且对大小写 不敏感。 2、INCLUDES 包含 类似于 Spring 配置文件&#xff0c;可以通过 includes 包含&#xff0c;redis.conf 可以作为总文件…

JVM运行时数据区

文章目录 JVM内存结构图1、运行时数据区域JDK 1.7JDK 1.81. 线程栈&#xff08;虚拟机栈&#xff09;2. 本地方法栈3. 程序计数器4. 方法区&#xff08;元空间&#xff09;5. 堆6、运行时常量池&#xff08;Runtime Constant Pool&#xff09;7、直接内存&#xff08;Direct Me…

QOpenGLWidget绘制实时图像

initializeGL()函数&#xff1a; initializeOpenGLFunctions();//创建VBO和VAO对象&#xff0c;并赋予IDglGenVertexArrays(1, &VAO);glGenBuffers(1, &VBO);//绑定VBO和VAO对象glBindVertexArray(VAO);glBindBuffer(GL_ARRAY_BUFFER, VBO);//为当前绑定到target的缓冲…