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

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

相关文章:

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

在MongoDB集合中查找文档 一、实验目的二、实验原理三、实验步骤1.启动MongoDB数据库、启动MongoDB Shell客户端2.数据准备-->person.json3.指定返回的键4 .包含或不包含 i n 或 in 或 in或nin、$elemMatch&#xff08;匹配数组&#xff09;5.OR 查询 $or6.Null、$exists7.…...

事务的总结

数据库事务 数据库事务是一个被视为单一的工作单元的操作序列。这些操作应该要么完整地执行&#xff0c;要么完全不执行。事务管理是一个重要组成部分&#xff0c;RDBMS 面向企业应用程序&#xff0c;以确保数据完整性和一致性。事务的概念可以描述为具有以下四个关键属性描述…...

[ROS]yolov5-7.0部署ROS

YOLOv5是一种目标检测算法&#xff0c;它是YOLO&#xff08;You Only Look Once&#xff09;系列算法的最新版本。与其它目标检测算法相比&#xff0c;YOLOv5在速度和准确性方面取得了显著的提升。在ROS&#xff08;Robot Operating System&#xff09;中使用Python部署YOLOv5可…...

Java抽象方法、抽象类和接口——第七讲

前言 上一讲,我们深入了解面向对象,介绍了面向对象有三个特征——封装、继承、多态,以及介绍方法的重载和重写,这些都是开发中很常用的特征,基本都尊重面向对象思想。再上一讲我们了解到了继承的时候,子类要重新写父类的方法,才能遵循子类的规则,那么忘记重写怎么办呢?…...

kafka集群之kraft模式

一、概要 Kafka作为一种高吞吐量的分布式发布订阅消息系统&#xff0c;在消息应用中广泛使用&#xff0c;尤其在需要实时数据处理和应用程序活动跟踪的场景&#xff0c;kafka已成为首选服务&#xff1b;在Kafka2.8之前&#xff0c;Kafka强依赖zookeeper来来负责集群元数据的管理…...

虹科案例 | 缆索挖掘机维护—小传感器,大作用!

一、 应用背景 缆索挖掘机 缆索挖掘机的特点是具有坚固的部件&#xff0c;如上部结构、回转环和底盘。底盘是用于移动挖掘机的下部机械部件&#xff0c;根据尺寸和型号的不同&#xff0c;由轮子或履带引导&#xff0c;并承载可转动的上部车厢。回转环连接上部和下部机器部件&am…...

Windows安装FFmpeg说明

下载地址 官网 Download FFmpeg Csdn ffmpeg安装包&#xff0c;ffmpeg-2023-08-28-git-b5273c619d-full-build.7z资源-CSDN文库 解压安装&#xff0c;添加环境变量 命令行输入ffmpeg 安装成功...

电子电路原理题目整理(1)

电子电路原理题目整理&#xff08;1&#xff09; 最近在学习《电子电路原理》&#xff0c;记录一下书后面试题目&#xff0c;答案为个人总结&#xff0c;欢迎讨论。 1.电压源和电流源的区别&#xff1f; 电压源在不同的负载电阻下可提供恒定的负载电压&#xff0c;而电流源对于…...

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.输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点&#xff0c;只能调整树中节点指针的指向。 为了让您更好地理解问题&#xff0c;以下面的二叉搜索树为例&#xff1a; 我们希望将这个二叉搜索树转化为双向循环链表。…...

【Unity3D】UI Toolkit容器

1 前言 UI Toolkit简介 中介绍了 UI Builder、样式属性、UQuery&#xff0c;本文将介绍 UI Toolkit 中的容器&#xff0c;主要包含 VisualElement、ScrollView、ListView、UI Toolkit&#xff0c;官方介绍详见→UXML elements reference。 2 VisualElement&#xff08;空容器&…...

手把手教你写出第一个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维度表关联

分析&回答 根据我们业务对维表数据关联的时效性要求&#xff0c;有以下几种解决方案&#xff1a; 1、实时查询维表 实时查询维表是指用户在Flink 的Map算子中直接访问外部数据库&#xff0c;比如用 MySQL 来进行关联&#xff0c;这种方式是同步方式&#xff0c;数据保证是…...

Docker Compose 安装使用 教程

Docker Compose 1.1 简介 Compose 项目是 Docker 官方的开源项目&#xff0c;负责实现对 Docker 容器集群的 快速编排 。从功能上看&#xff0c;跟 OpenStack 中的 Heat 十分类似。 其代码目前在 https://github.com/docker/compose 上开源。 Compose 定位是 「定义和运行多个…...

睿趣科技:开抖音小店挣钱吗到底

在当今数字化时代&#xff0c;社交媒体平台成为了创业者们寻找商机和赚钱的新途径。而抖音作为一款风靡全球的短视频分享平台&#xff0c;自然也成为了许多人开设小店、进行创业的选择之一。那么&#xff0c;开抖音小店能否真正实现盈利&#xff0c;成为了一个备受关注的话题。…...

国际腾讯云账号云服务器网络访问丢包问题解决办法!!

本文主要介绍可能引起云服务器网络访问丢包问题的主要原因&#xff0c;及对应排查、解决方法。下面一起了解腾讯云国际云服务器网络访问丢包问题解决办法&#xff1a; 可能原因 引起云服务器网络访问丢包问题的可能原因如下&#xff1a; 1.触发限速导致 TCP 丢包 2.触发限速导致…...

Deepnote:为什么我停止使用 Jupyter Notebook

Jupyter 笔记本已经成为必不可少多年来用于众多数据科学工作流程的工具。其中包括执行数据挖掘、分析、处理、建模以及在每个数据科学项目的生命周期中执行的一般日常实验任务。 Jupyter(作者提供的图片) 尽管它很受欢迎,但许多数据科学家也指出了它的众多缺点,例如这里和...

山西省文物局与大势智慧签订战略合作协议

8月24日&#xff0c;由山西省文物局、中国文物信息咨询中心(国家文物局数据中心)主办的数字文博发展论坛在太原举行。武汉大势智慧科技有限公司&#xff08;后简称“大势智慧”&#xff09;受邀参与&#xff0c;与来自国内文博数字化领域的专家学者齐聚一堂&#xff0c;围绕“数…...

Java设计模式:一、六大设计原则-02:开闭原则

文章目录 一、定义&#xff1a;开闭原则二、模拟场景&#xff1a;开闭原则2.0 工程结构2.1 定义面积计算接口2.2 面积计算实现类 三、违背方案&#xff1a;开闭原则四、改善代码&#xff1a;开闭原则4.1 扩展继承4.2 单元测试 一、定义&#xff1a;开闭原则 开闭原则&#xff…...

DETRs Beat YOLOs on Real-time Object Detection

目录 1、模型架构1.1高效混合编码器1.1.1 尺度内特征交互模块AIFI1.1.2 跨尺度特征融合CCFM 1.2IoU感知查询选择总结 DETRs在实时目标检测中击败YOLO 问题&#xff1a;DETR的高计算成本&#xff0c;实时检测效果有待提高 解决&#xff1a;提出了一个实时的目标检测器 具体来说…...

【数据分享】1901-2022年1km分辨率的逐月降水栅格数据(免费获取/全国/分省)

气象指标在日常研究中非常常用&#xff0c;之前我们给大家分享过来源于国家青藏高原科学数据中心提供的气象指标栅格数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff1a; 1901-2022年1km分辨率逐月平均气温栅格数据1901-2022年1km分辨率逐年平均气温栅格数据…...

全网首发!奔驰宝马奥迪卡带机卡带通道激活模块,无损安装可以接2路AUX

文章目录 1.前言2.时序逆向分析2.1协议分析2.2卡带音频通道引出 3、PCB设计4、程序设计5、焊接调试6、结语 1.前言 ​ 之前写过四篇关于车机增加音频输入的方法。 1、07宝来经典车机CD收音机&#xff08;RC668&#xff09;改装增加蓝牙播放音乐 2、全网首发&#xff01;老大…...

反弹shell总结

反弹shell总结 讲在前面说的话:反弹shell总结nc反弹shell正向shell反向shell正向shell(服务端被攻击):反向shell(客户端被攻击):无nc反弹shellpython反弹shellbash反弹shellPHP反向shellPerl反向shellJava反弹shellsocat 反弹shellRuby反弹shellLua反弹shellAwk 反弹she…...

[机缘参悟-103] :IT人关于接纳的思考与感悟

目录 前言&#xff1a; 一、接纳 1.1 什么是接纳 1.2 对接纳的误解 1.3 接纳的含义 1.4 "存在即合理" VS 接纳 1.5 接纳 VS 躺平 VS 随遇而安 1.6 为什么现实总是那么不尽人意 1.7 现实世界的多样性 1.8 接纳与认命 1.9 不接纳的表现 前言&#xff1a; …...

甄知携AIGC新升级产品参与首届人工智能生成内容国际会议,共探AIGC最前沿技术

首届人工智能生成内容国际会议(2023The 1st International Conference on AI-generated Content (AIGC2023)于2023年8月25-26日在中国上海举行。本次会议得到了复旦大学、中国科技大学、同济大学、上海交通大学、上海人工智能实验室、香港中文大学等知名院校和研究机构的大力支…...

4.9 已建立连接的TCP,收到SYN会发生什么?

1. 客户端的 SYN 报文里的端口号与历史连接不相同 此时服务端会认为是新的连接要建立&#xff0c;于是就会通过三次握手来建立新的连接。 旧连接里处于 Established 状态的服务端最后会怎么样呢&#xff1f; 服务端给客户端发消息了&#xff1a;客户端连接已被关闭&#xff…...

leetcode 365 水壶问题

有一个水壶容量或者两个水壶加起来总容量为目标容量 总共有八种选择&#xff1a;第一种倒满x,第二种倒满y,第三种清空x,第四种清空y,第五种x 倒给 y y能装满 &#xff0c;第六种 x 倒给 y x倒完, 。。。。 这里用深度遍历&#xff0c;时间超时 class Solution {public boole…...

django/CVE-2017-12794XSS漏洞复现

docker搭建漏洞复现环境 漏洞原理看帮助文档 # Django debug page XSS漏洞&#xff08;CVE-2017-12794&#xff09;分析Django发布了新版本1.11.5&#xff0c;修复了500页面中可能存在的一个XSS漏洞&#xff0c;这篇文章说明一下该漏洞的原理和复现&#xff0c;和我的一点点评…...