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.hqwc.cn/news/94882.html

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

相关文章

Windows7安装SSH客户端的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【数据结构】2015统考真题 6

题目描述 【2015统考真题】求下面的带权图的最小&#xff08;代价&#xff09;生成树时&#xff0c;可能是Kruskal算法第2次选中但不是Prim算法&#xff08;从v4开始&#xff09;第2次选中的边是&#xff08;C&#xff09; A. (V1, V3) B. (V1, V4) C. (V2, V3) D. (V3, V4) …

ToBeWritten之VSOC安全运营

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

华为OD机试 - 敏感字段加密(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》…

微软表示Visual Studio的IDE即日起开启“退休”倒计时

据了解&#xff0c;日前有消息透露称&#xff0c;适用于 Mac平台的Visual Studio集成开发环境(IDE)于8月31日启动“退休”进程。 而这意味着Visual Studio for Mac 17.6将继续支持12个月&#xff0c;一直到2024年8月31日。    微软表示后续不再为Visual Studio for Mac开发…

ebay测评,物理环境与IP环境:解决平台风控问题的关键

近期eBay平台出现了大量风控问题&#xff0c;导致许多买家账号受到影响。实际上&#xff0c;这主要是由于环境搭建方面存在主要问题。时至2023年&#xff0c;许多人的技术方案仍停留在几年前&#xff0c;要么使用一键新机工具配合国外IP&#xff0c;要么使用指纹浏览器配合国外…

结构化日志记录增强网络安全性

日志是一种宝贵的资产&#xff0c;在监视和分析应用程序或组织的 IT 基础结构的整体安全状况和性能方面发挥着至关重要的作用。它们提供系统事件、用户活动、网络流量和应用程序行为的详细记录&#xff0c;从而深入了解潜在威胁或未经授权的访问尝试。虽然组织历来依赖于传统的…

MySQL基础篇:数据库概述和部署

SQL 概述 SQL&#xff0c;一般发音为sequel&#xff0c;SQL的全称Structured Query Language)&#xff0c;SQL用来和数据库打交道&#xff0c;完成和数据库的通信&#xff0c;SQL是一套标准。但是每一个数据库都有自己的特性别的数据库没有,当使用这个数据库特性相关的功能,这…

Linux字符设备中的两个重要结构体(file、inode)

https://www.cnblogs.com/chen-farsight/p/6177870.html

Navicat16安装教程

注&#xff1a;因版权原因&#xff0c;本文已去除破解相关的文件和内容 1、在本站下载解压后即可获得Navicat16安装包和破解补丁&#xff0c;如图所示 2、双击“navicat160_premium_cs_x64.exe”程序&#xff0c;即可进入安装界面&#xff0c; 3、点击下一步 4、如图所示勾选“…

Windows下Redis的安装和配置

文章目录 一,Redis介绍二,Redis下载三,Redis安装-解压四,Redis配置五,Redis启动和关闭(通过terminal操作)六,Redis连接七,Redis使用 一,Redis介绍 远程字典服务,一个开源的,键值对形式的在线服务框架,值支持多数据结构,本文介绍windows下Redis的安装,配置相关,官网默认下载的是…

【小沐学Unity3d】3ds Max 多维子材质编辑(Multi/Sub-object)

文章目录 1、简介2、精简材质编辑器2.1 先创建多维子材质&#xff0c;后指定它2.2 先指定标准材质&#xff0c;后自动创建多维子材质 3、Slate材质编辑器3.1 编辑器简介3.2 编辑器使用 结语 1、简介 多维子材质&#xff08;Multi/Sub-object&#xff09;是为一个模形&#xff0…