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日,由山西省文物局、中国文物信息咨询中心(国家文物局数据中心)主办的数字文博发展论坛在太原举行。武汉大势智慧科技有限公司(后简称“大势智慧”)受邀参与,与来自国内文博数字化领域的专家学者齐聚一堂,围绕“数…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
