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日,由山西省文物局、中国文物信息咨询中心(国家文物局数据中心)主办的数字文博发展论坛在太原举行。武汉大势智慧科技有限公司(后简称“大势智慧”)受邀参与,与来自国内文博数字化领域的专家学者齐聚一堂,围绕“数…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
