MongoDB实验——在MongoDB集合中查找文档
在MongoDB集合中查找文档
- 一、实验目的
- 二、实验原理
- 三、实验步骤
- 1.启动MongoDB数据库、启动MongoDB Shell客户端
- 2.数据准备-->person.json
- 3.指定返回的键
- 4 .包含或不包含 i n 或 in 或 in或nin、$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客户端

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




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

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

3.指定返回的键
格式为:db.[documentName].find({条件},{键指定})
3.1查询出所有学生的name、age和country信息

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

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

4 .包含或不包含 i n 或 in 或 in或nin、$elemMatch(匹配数组)
4.1查询国籍是中国或美国的学生信息

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

4.3查询出满足数组中指定条件的文档
步骤一:在当前数据库中添加数据到 scores 集合中{_id: 1, results: [82,85,88] },{ _id: 2, results: [75,88,89]}

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

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

6.Null、$exists
- 1把中国国籍的学生上增加新的键 sex

6.2查询出sex等于null的学生

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

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

7.正则查询 $regex
正则表达式对象:{ <field>: /pattern/<options> };
$regex 为模糊查询的字符串提供正则表达式功能。
7.1查询出名字中存在”li”的学生的信息

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”的学生的信息。

n o t 和 not 和 not和nin 的区别是 n o t 可以用在任何地方,而 not 可以用在任何地方,而 not可以用在任何地方,而nin 用到集合上。
9.数组查询$all 和 index 应用
9.1查询喜欢看MONGODB和JS的学生

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

10.查询指定长度数组$size,它不能与比较查询符一起使用
查询出喜欢的书籍数量是 4 本的学生

11.查询出喜欢的书籍数量大于 4 本的学生
- 1增加字段 size

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

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

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

13.在当前数据库 persons1 集合中中添加以下文档信息:
{ _id:1,
members:[{name:“BuleRiver1”,age:27,gender:“M”},
{name:“BuleRiver2”, age:23, gender:“F”},
{name:“BuleRiver3”, age:21, gender:“M”}]
}

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

查询是否存在 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本书

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

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

15.嵌套文档查询
为 zhangsan 添加学习简历文档 zhangsanschoool.json。
文档内容:


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

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

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条数据

16.2前跨度数据——skip()
查询persons中的前6~8共三条数据,即前面5条省略跳过

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


17.游标
查询学生集合中的所有文档
> var p = db.persons.find(); //得到游标
> while(p.hasNext()){ //遍历游标
> obj = p.next(); //指向下一条记录
> print(obj); //输出
>}

18.Count函数——计数
查询美国国籍的人数

19.Distinct函数——去重
查询 persons 集合中一共有多少个国家,分别是什么

20.嵌套文档查询
查询在“school1”学校上过学的学生

注意:通过”.”连接集合 baseinf 和字段,并用双引号实现指定嵌套文档的查询
查询在“school1”学校上过学且成绩为”A”的学生,查询结果只显示学生姓名

相关文章:
MongoDB实验——在MongoDB集合中查找文档
在MongoDB集合中查找文档 一、实验目的二、实验原理三、实验步骤1.启动MongoDB数据库、启动MongoDB Shell客户端2.数据准备-->person.json3.指定返回的键4 .包含或不包含 i n 或 in 或 in或nin、$elemMatch(匹配数组)5.OR 查询 $or6.Null、$exists7.…...
事务的总结
数据库事务 数据库事务是一个被视为单一的工作单元的操作序列。这些操作应该要么完整地执行,要么完全不执行。事务管理是一个重要组成部分,RDBMS 面向企业应用程序,以确保数据完整性和一致性。事务的概念可以描述为具有以下四个关键属性描述…...
[ROS]yolov5-7.0部署ROS
YOLOv5是一种目标检测算法,它是YOLO(You Only Look Once)系列算法的最新版本。与其它目标检测算法相比,YOLOv5在速度和准确性方面取得了显著的提升。在ROS(Robot Operating System)中使用Python部署YOLOv5可…...
Java抽象方法、抽象类和接口——第七讲
前言 上一讲,我们深入了解面向对象,介绍了面向对象有三个特征——封装、继承、多态,以及介绍方法的重载和重写,这些都是开发中很常用的特征,基本都尊重面向对象思想。再上一讲我们了解到了继承的时候,子类要重新写父类的方法,才能遵循子类的规则,那么忘记重写怎么办呢?…...
kafka集群之kraft模式
一、概要 Kafka作为一种高吞吐量的分布式发布订阅消息系统,在消息应用中广泛使用,尤其在需要实时数据处理和应用程序活动跟踪的场景,kafka已成为首选服务;在Kafka2.8之前,Kafka强依赖zookeeper来来负责集群元数据的管理…...
虹科案例 | 缆索挖掘机维护—小传感器,大作用!
一、 应用背景 缆索挖掘机 缆索挖掘机的特点是具有坚固的部件,如上部结构、回转环和底盘。底盘是用于移动挖掘机的下部机械部件,根据尺寸和型号的不同,由轮子或履带引导,并承载可转动的上部车厢。回转环连接上部和下部机器部件&am…...
Windows安装FFmpeg说明
下载地址 官网 Download FFmpeg Csdn ffmpeg安装包,ffmpeg-2023-08-28-git-b5273c619d-full-build.7z资源-CSDN文库 解压安装,添加环境变量 命令行输入ffmpeg 安装成功...
电子电路原理题目整理(1)
电子电路原理题目整理(1) 最近在学习《电子电路原理》,记录一下书后面试题目,答案为个人总结,欢迎讨论。 1.电压源和电流源的区别? 电压源在不同的负载电阻下可提供恒定的负载电压,而电流源对于…...
iPhone 15预售:获取关键信息
既然苹果公司将于9月12日正式举办iPhone 15发布会,我们了解所有新机型只是时间问题。如果你是苹果的狂热粉丝,或者只是一个早期用户,那么活动结束后,你会想把所有的注意力都集中在iPhone 15的预购上——这样你就可以保证自己在发布日会有一款机型。 有很多理由对今年的iPh…...
Kind创建本地环境安装Ingress
目录 1.K8s什么要使用Ingress 2.在本地K8s集群安装Nginx Ingress controller 2.1.使用Kind创建本地集群 2.1.1.创建kind配置文件 2.1.2.执行创建命令 2.2.找到和当前k8s版本匹配的Ingress版本 2.2.1.查看当前的K8s版本 2.2.2.在官网中找到对应的合适版本 2.3.按照版本安…...
MySQL与Oracle数据库通过系统命令导出导入
MySQL导出 mysqldump -uroot -ppassword 库名 表名 --where"s_dtend<2023-05-01 00:00:00 and s_dtend>2023-01-01 00:00:00 and (i_mbr!10000 OR (i_mbr 10000 AND I_ACTV IN (SELECT I_ACTV FROM t_mk_activity WHERE S_DTEND < 2023-05-01 00:00:00)))"…...
从零学算法(剑指 Offer 36)
123.输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表。…...
【Unity3D】UI Toolkit容器
1 前言 UI Toolkit简介 中介绍了 UI Builder、样式属性、UQuery,本文将介绍 UI Toolkit 中的容器,主要包含 VisualElement、ScrollView、ListView、UI Toolkit,官方介绍详见→UXML elements reference。 2 VisualElement(空容器&…...
手把手教你写出第一个C语言程序
Hello, World! 1. 前言2. 准备知识2.1 环境2.2 文件的分类2.3 注释2.3.1 注释的作用2.3.2 注释的两种风格2.3.2.1 C语言的注释风格2.3.2.2 C的注释风格 2.3.3 VS中注释和取消注释的快捷键 3. 开始演示3.1 创建项目3.2 创建源文件3.3 写代码3.4 编译链接运行 4. 代码解释4.1 写主…...
flink维度表关联
分析&回答 根据我们业务对维表数据关联的时效性要求,有以下几种解决方案: 1、实时查询维表 实时查询维表是指用户在Flink 的Map算子中直接访问外部数据库,比如用 MySQL 来进行关联,这种方式是同步方式,数据保证是…...
Docker Compose 安装使用 教程
Docker Compose 1.1 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的 快速编排 。从功能上看,跟 OpenStack 中的 Heat 十分类似。 其代码目前在 https://github.com/docker/compose 上开源。 Compose 定位是 「定义和运行多个…...
睿趣科技:开抖音小店挣钱吗到底
在当今数字化时代,社交媒体平台成为了创业者们寻找商机和赚钱的新途径。而抖音作为一款风靡全球的短视频分享平台,自然也成为了许多人开设小店、进行创业的选择之一。那么,开抖音小店能否真正实现盈利,成为了一个备受关注的话题。…...
国际腾讯云账号云服务器网络访问丢包问题解决办法!!
本文主要介绍可能引起云服务器网络访问丢包问题的主要原因,及对应排查、解决方法。下面一起了解腾讯云国际云服务器网络访问丢包问题解决办法: 可能原因 引起云服务器网络访问丢包问题的可能原因如下: 1.触发限速导致 TCP 丢包 2.触发限速导致…...
Deepnote:为什么我停止使用 Jupyter Notebook
Jupyter 笔记本已经成为必不可少多年来用于众多数据科学工作流程的工具。其中包括执行数据挖掘、分析、处理、建模以及在每个数据科学项目的生命周期中执行的一般日常实验任务。 Jupyter(作者提供的图片) 尽管它很受欢迎,但许多数据科学家也指出了它的众多缺点,例如这里和...
山西省文物局与大势智慧签订战略合作协议
8月24日,由山西省文物局、中国文物信息咨询中心(国家文物局数据中心)主办的数字文博发展论坛在太原举行。武汉大势智慧科技有限公司(后简称“大势智慧”)受邀参与,与来自国内文博数字化领域的专家学者齐聚一堂,围绕“数…...
家庭宽带上网背后的隐形功臣:一文拆解光猫/路由器里的NAT和DHCP是怎么协同工作的
家庭网络中的隐形守护者:NAT与DHCP如何编织你的数字生活 当你躺在沙发上用手机追剧时,是否想过为什么所有家庭设备都能和平共处在同一网络?192.168.1.x这串神秘数字背后,藏着两套精密的协议系统——它们像建筑物的水电管线般隐形却…...
【Midjourney纹理生成高阶秘籍】:20年AI视觉工程师亲授5大不可外传的材质控制法则
更多请点击: https://kaifayun.com 第一章:纹理生成的本质:从像素噪声到物理材质的范式跃迁 纹理生成早已超越了早期“随机像素着色”的朴素阶段,演进为融合程序化建模、物理渲染方程(PBR)与微表面理论的系…...
业务接口安全加固:杜绝恶意刷量与非法调用风险
业务接口安全加固方法输入验证与过滤 对所有传入参数进行严格校验,包括数据类型、长度、格式(如正则匹配)。对特殊字符进行转义或过滤,防止SQL注入、XSS等攻击。使用白名单机制限制可接受的输入范围。访问频率限制 基于IP、用户ID…...
联想笔记本BIOS解锁完整指南:一键开启隐藏高级设置
联想笔记本BIOS解锁完整指南:一键开启隐藏高级设置 【免费下载链接】LEGION_Y7000Series_Insyde_Advanced_Settings_Tools 支持一键修改 Insyde BIOS 隐藏选项的小工具,例如关闭CFG LOCK、修改DVMT等等 项目地址: https://gitcode.com/gh_mirrors/le/L…...
RetinaFace实战:10个技巧教你高效检测和提取人脸
RetinaFace实战:10个技巧教你高效检测和提取人脸 【免费下载链接】retinaface RetinaFace: Deep Face Detection Library for Python 项目地址: https://gitcode.com/gh_mirrors/re/retinaface RetinaFace是一个基于深度学习的Python人脸检测库,专…...
MapTRV2 部署训练与测试(踩坑版本)
1. 背景 目录 1. 背景 1.1 结果 1.1.1 过程截图 存在的坑 安装环境 踩坑记录 过程记录 requirements.txt 设置调试的launch.json数据 合成视频脚本 跑通了MapTRV1 ,想继续跑通MapTRV2,安装运行的时候都存在问题,先从网上找了一些相关的教程,发现教程需要收费,作为白嫖党怎…...
从登录页到仪表盘:手把手教你为Vue2+Element后台管理系统添加中英文切换
从登录页到仪表盘:Vue2Element后台管理系统国际化实战指南 当产品经理突然要求为已有后台管理系统添加多语言支持时,许多开发者会陷入手忙脚乱的境地。本文将分享一套经过实战检验的国际化方案,不仅能快速实现基础功能,还能解决那…...
智能设计时代的企业VI物料采购:小批量定制降本增效实践
核心摘要 在智能设计与柔性供应链深度融合的背景下,企业可通过一体化在线平台实现“品牌周边”小批量定制,将传统跨环节采购转为单线闭环,显著降低沟通与试错成本。小批量定制的核心价值:打破传统印厂起订量限制,按需…...
Steam Economy Enhancer:终极Steam市场与库存自动化管理指南
Steam Economy Enhancer:终极Steam市场与库存自动化管理指南 【免费下载链接】Steam-Economy-Enhancer 中文版:Enhances the Steam Inventory and Steam Market. 项目地址: https://gitcode.com/gh_mirrors/ste/Steam-Economy-Enhancer Steam Eco…...
SVN 报错 Previous operation has not finished,提示需要 clean up
SVN报错"Previous operation has not finished"通常是由于操作中断导致工作副本被锁定。 解决方法按优先级推荐: 1)首选执行Cleanup操作,勾选"Cleanup working copy status"和"Break write locks";…...
