MongoDB文档-基础使用-在客户端(dos窗口)/可视化工具中使用MongoDB基础语句

阿丹:

        本文章将描述以及研究mongodb在客户端的基础应用以及在spring-boot中整合使用mongodb来完成基本的数据增删改查。

先放官方的文章

MongoDB CRUD操作 - MongoDB-CN-Manual

本文章分为:

        在客户端(dos窗口)/可视化工具中使用MongoDB语句

       在spring-boot中整合mongodb并完成数据的增删改查

在窗口中以及可视化工具使用mongodb语句进行操作

MongoDB如何创建数据库和集合 | MongoDB中文社区

MongoDB CRUD操作 - MongoDB-CN-Manual

 新建一个查询来演示效果:

 mongodb如何创建数据库和集合

        数据库学习的第一步一定是创建数据库和集合。数据库用于存储所有集合,而集合用来存储所有文档。这些文档将一次包含相关的“字段名”和“字段”的值。

同时我们要知道一个事情就是文档中也是可以存在文档的。类比与java中的实体类就方便理解很多。一个类中的属性也可以是其他的实体类。 

下面是一个文档是示例: 

{
    “Employeeid”:1,
    “EmployeeName”:“Smith”
}
冒号前面是field names
后面就是 field values

使用Use命令创建数据库

        使用use命令来创建一个新的数据库:

use ExampleDB

这个代码中的ExampleDB就是新建的数据库文件。

这段mongodb的use代码可以类比为mysql中的:

IF NOT EXISTS 
    (SELECT * FROM sys.databases WHERE name = 'ExampleDB') 
        CREATE DATABASE ExampleDB;

这个示例的sql在mysql中执行的时候是一个效果。 

代码解释:

        1、使用 use 命令来创建mongodb中的数据库,如果数据库不存在,将创建一个新的数据库。

        2、同样如果数据库存在则使用这个数据库。

可以看到执行成功。在use语句执行成功之后mongodb将自动切换到创建的数据库。

使用insert()创建集合/表

创建集合的最简单方法是一条记录(不过是使用字段名称和值组成的文档)插入到集合中。如果该集合不存在,则会创建一个新的集合。

use ExampleDB

db.ExampleDB.insert
(
	{
		"员工编号":1,
		"员工姓名":"阿丹"
	}
	
)

 解释一下语法:

        db:是一个对象,代表一个数据库的连接。在使用这个语言之前,需要建立数据库的连接。以便在代码中访问数据库。

       ExampleDB:进行操作的集合名称,如果没有这个集合就会新建这个集合。

  {
        "员工编号":1,
        "员工姓名":"阿丹"
    }

上面就是一个文档

        “员工编号”:就是一个field names

        “员工编号的值”:就是value

 注意:

        如果在mongodb中没有这个库的数据使用这样的插入语句就会新建一个这样的库

        使用上述语句来进行插入的时候是不完善的。因为这会导致我们的这个新增的文档添加到一个与库的名字一样的集合中去。一定要注意。

 使用insert()在mongodb中插入数组

尝试使用数组的形式一次性的多次传入多个文档。

完成步骤思想:

        1、创建一个名字叫Example数组javascript变量来保存文档数组

        2、将具有字段名称的值和所需要的文档添加到变量中

        3、使用insert命令将文档数组插入到集合中

#定义数组
var Example = [
	{
		"员工编号":2,
		"员工姓名":"帅丹"
	},
	{
		"员工编号":3,
		"员工姓名":"大力丹"
	},
	{
		"员工编号":4,
		"员工姓名":"快乐丹"
	}
]
#将定义的数据添加到ExampleDB集合中
db.ExampleDB.insert(Example)

这就是在MongoDB中完成了批量添加。
 现在可以看到已经成功的加入了三条数据。也就是三个文档。

 使用查询语句,并规定使用JSON格式打印

        在以前使用的文档形式存储的格式中最常使用的就是json的形式。更是因为如果我们拿到了json形式的字符串的话。我们可以很轻松的将这个json字符串转换成我们的实体类。

        json格式的全称为JavaScript Ojbect Notation的格式(对我们敲java的人很友好),是一种规律的存储信息,并且便于阅读的格式。

        那么下面我们就使用语句来完成打印json的示例:

db.查询使用的集合.find().forEach(printjson)

执行尝试一下:

 

 代码方法以及参数解释:

  • db.ExampleDB.find(): 这个语句使用find()方法来查询ExampleDB数据库中的所有文档。find()方法返回一个游标(cursor)对象,该对象包含了所有符合查询条件的文档。
  • forEach: 这个方法用于遍历游标中的每个文档,并对每个文档执行指定的操作。
  • printjson: 这个函数用于将文档以JSON格式打印到控制台上

其中的find()如果括号中什么都不写的话就默认是查找所有的。

如何去设置主键ID呢?

通过解析刚才MongoDB给我们的返回值中我们可以看到本来在业务逻辑中员工编号是成为使用主键id。但是发现mongodb自己生成了一个不规则的字符串字段。“_id”。现在我们需要将这个“_id”给设置成我们的主键id.

在MongoDB中,_id字段是集合的主键,以便可以在集合中唯一地标识每个文档。_id字段包含唯一的ObjectID值。

默认情况下,在集合中插入文档时,如果您没有在字段名称中添加带有_id的字段名称,则MongoDB将自动添加一个Object id字段

所以原理是只要我们在添加的时候有这个字段名叫做“_id”就可以完成主键的替换。不在使用系统自带的生成的id.

我们来进行尝试:

使用代码:

db.ExampleDB.insert
(
	{
		"_id":1,
		"员工姓名":"代码阿丹"
	}
	
)

 我在这个文档中规定使用了字段名:“_id”

 显示添加成功,使用上一小节的查询输出来查看一下,代码阿丹的id是否为1.替换掉系统自己生成的id。

可以看到完成了主键id的规则替换。

 说明我们可以使用给字段名“_id”赋值来作为集合的主键。

使用mongodb中的查询语句find()来进行查询mongodb文档

        通过条件查询的语句的执行我们就可以从mongodb中拿到更精准的的数据。以及组合等数据。从后台拿取的数据越精确对于后面的开发就会省力很多。

        那么MongoDB就提供了一个名为db.collection.find()的函数,该函数用于从MongoDB数据库中检索文档。

基本查询操作:

        基本查询操作包括一些简单的操作,比如获取MongoDB集合中的所有文档。

        因为我们之前的操作中的我们新建了一个ExampleDB集合。所以我们就可以执行下面的命令。

db.ExampleDB.find({})

指令解析:

        db.ExampleDB.find({}) 这个 MongoDB 语句的作用是在 ExampleDB 数据库中查找所有文档。

find() 方法是 MongoDB 中用于查询文档的方法,它接受一个查询条件作为参数,并返回符合条件的所有文档。在这个例子中,查询条件是一个空对象 {},表示没有限制条件,因此会将数据库中的所有文档都返回。

{} 这个符号表示一个空的查询条件,也可以使用其他条件来限制查询的结果。例如,你可以使用类似于 { "员工姓名": "阿丹" } 的条件来查询员工姓名为 "阿丹" 的文档,或者使用类似于 { "员工编号": { $gt: 100 } } 的条件来查询员工编号大于 100 的文档。

因此,db.ExampleDB.find({}) 这个语句的作用是返回 ExampleDB 数据库中的所有文档,而 {} 表示没有限制条件,会返回所有文档。

条件查询

明确条件查询

        比如我想要查询员工编号为1的员工。下面是一个例子:

#查询员工编号为1的员工
db.ExampleDB.find({"员工编号":1}).forEach(printjson)

这个语句中使用了{},中括号的方式,在中括号中使用了json的形式来规定规则,来查询指定的编号员工。

范围查询

        使用大于搜索条件,它实际上搜索那些大于指定值的文档。

        比如我想查询员工标号大于2的文档,下面是例子:

#查询员工编号大于2的员工
db.ExampleDB.find({"员工编号":{$gt : 2}}).forEach(printjson)

 解释说明:

        $gt为查询选择运算符,意思是使用大于号表达式。

 给大家提供一下有关的判断表达式;

  • $lt:小于
  • $eq:等于
  • $ne:不等于
  • $gt:大于等于
  • $lt:小于等于

MongoDB游标教程:通过示例来学习

        当使用db.collection.find()函数在集合中搜索文档时,结果将返回指向文档集合的指针,该指针称为游标。类似于指针。

        默认情况下,返回查询结果时,游标将自动进行迭代。当然可以一个接一个明确展示游标中返回的结果目录。

        比如在集合中有三个文档,光标初始化指向第一个文档,然后遍历该集合的所有文档。

 示例代码:

#演示游标
var myExampleDB = db.ExampleDB.find({});
while(myExampleDB.hasNext()){
	print(tojson(myExampleDB.next()))
}

 代码解释:

        这段代码的作用是在 ExampleDB 数据库中查找所有文档,并将每个文档以 JSON 格式打印到控制台上。

        首先,通过 db.ExampleDB.find({}) 方法查询 ExampleDB 数据库中的所有文档,返回一个游标对象 myExampleDB

        然后,使用 while 循环遍历游标中的每个文档,直到游标中的文档遍历完毕。在循环体中,使用 tojson() 函数将每个文档转换为 JSON 格式,并使用 print() 函数将 JSON 打印到控制台上。

总的来说,这段代码的功能是查询 ExampleDB 数据库中的所有文档,并将每个文档以 JSON 格式打印到控制台上

MongoDB limit查询结果

        这个修饰符用于限制查询结果集中返回的文档数。下面就是例子。

#limit结果
db.ExampleDB.find().limit(2).forEach(printjson)

这个语法和用法和mysql中的类似但不一样。这个函数中参数是几就查出几个文档。

MongoDB中的排序

在MongoDB中是支持根据集合中的任何键升序或者降序来制定要返回的文档的顺序的。

示例代码:

#根据员工编号倒序排序
db.ExampleDB.find().sort({ 员工编号: -1}).forEach(printjson)

这里清楚地显示了按Employeeid降序返回的文档。

值为1则按照升序。

MongoDB中的计数函数Count()

聚合的概念是对查询中返回的结果进行计算。例如,假设我们想知道根据触发的查询集合中文档的数量是多少,那么MongoDB提供了count()函数。

让我们可以查询文档中数量。

让我们看一个例子。

#查看集合中文档数量
db.ExampleDB.count()

这里是一些count()函数的用法

在 MongoDB 中,count() 函数用于计算集合中满足指定条件的文档数量。count() 函数接受一个查询条件作为参数,并返回满足条件的文档数量。

以下是一些使用 count() 函数的示例:

计算集合中所有文档的数量:

 

db.myCollection.count({})

 

计算集合中指定条件的文档数量:

db.myCollection.count({ "key": "value" })

 

使用 match 管道操作符计算集合中匹配条件的文档数量:

db.myCollection.aggregate([
  { $match: { "key": "value" } },
   { $count: "count" }
])

 

使用 match 和 group 管道操作符计算分组后的文档数量:

db.myCollection.aggregate([
   { $match: { "key": "value" } },
   { $group: { _id: "groupKey", count: { $sum: 1 } } }
])

以上示例中,count() 函数分别用于计算集合中所有文档数量、计算满足特定条件的文档数量、使用 match 和 group 管道操作符计算分组后的文档数量。

MongoDB中的删除文件remove()

在MongoDB中,db.collection.remove()方法用于从集合中删除文档。所有文档都可以从集合中删除,也可以仅从符合特定条件的文档中删除。

如果仅发出remove命令,则所有文档将从集合中删除。

下面的代码示例演示如何从集合中删除特定文档。

#删除员工标号为4的文档
db.ExampleDB.remove({员工编号:4})

可以看到对于删除对应字段名和值的语法。

 使用 Update()更新MongoDB文档

MongoDB提供了update()命令来更新集合的文档。仅仅更新要更新的文档,可以将条件添加到更新语句,以便更新选定的文档。

该命令中的基本参数是需要更新文档的条件,其次是需要执行的修改。

操作思路:

  1. 发出更新命令;
  2. 选择要用于确定需要更新哪个文档的条件。在我们的例子中,我们要更新员工ID为22的文档;
  3. 使用set命令修改字段名称;
  4. 选择要修改的字段名称,并相应地输入新值。
#修改员工标号为1的名字
db.ExampleDB.update(
	{"员工编号":1}, 
	{
		$set:{
			"员工姓名":"库库帅阿丹"
		}
	}
)

 看到表明,一条记录符合条件,一条记录修改了相关字段!!!

下面是一些update的用法

这个代码是使用 MongoDB 的 update() 函数来更新名为 "员工编号" 的字段值为 1 的文档中的 "员工姓名" 字段的值为 "库库帅阿丹"。

具体来说,update() 函数接受两个参数:

  1. 查询条件,指定要更新的文档。在这个例子中,查询条件是 {"员工编号":1},表示要更新 "员工编号" 字段值为 1 的文档。
  2. 更新操作,指定要对文档进行的更新操作。在这个例子中,更新操作为 { $set: { "员工姓名": "库库帅阿丹" } },表示要将 "员工姓名" 字段的值更新为 "库库帅阿丹"。

其中,更新操作可以使用以下几个操作符:

  • $set: 设置指定字段的值。
  • $unset: 删除指定字段。
  • $rename: 重命名指定字段。
  • $inc: 增加指定字段的值。

除了上面的示例,update() 函数还可以使用其他参数来控制更新行为,比如 multi 参数(指定是否更新多个文档)和 upsert 参数(指定是否插入新文档)。

总之,update() 函数是 MongoDB 中用于更新文档的函数,可以方便地对数据库中的文档进行修改操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/58198.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ESP32 LVGL:无法显示过大的GIF图片(修改VLGL RAM缓存大小)

文章目录 问题描述:问题解决更改LVGL RAM缓存大小看ESP32的RAM使用情况 参考链接 问题描述: 使用LVGL可显示64 * 64的GIF,但是却无法显示120*120的GIF。 问题解决 更改LVGL RAM缓存大小 分析原因:在用LVGL显示GIF图片时&#…

iMX6ULL驱动开发 | OLED显示屏SPI驱动实现(SH1106,ssd1306)

周日业余时间太无聊,又不喜欢玩游戏,大家的兴趣爱好都是啥?我觉得敲代码也是一种兴趣爱好。正巧手边有一块儿0.96寸的OLED显示屏,一直在吃灰,何不把玩一把?于是说干就干,最后在我的imax6ul的lin…

《Gradle构建脚本的基本结构和语法》

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

HTML+CSS+JavaScript:轮播图的自动播放、手动播放、鼠标悬停暂停播放

一、需求 昨天我们做了轮播图的自动播放,即每隔一秒自动切换一次 今天我们增加两个需求: 1、鼠标点击向右按钮,轮播图往后切换一次;鼠标点击向左按钮,轮播图往前切换一次 2、鼠标悬停在轮播图区域中时,…

基于Yolov2深度学习网络的车辆检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 卷积神经网络(CNN) 4.2. YOLOv2 网络 4.3. 实现过程 4.4. 应用领域 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心…

产品设计中的小体验:带来大问题解决之道

在激烈的市场竞争中,产品的体验设计已成为区分优劣的重要标志。用户不仅仅关注产品的核心功能,更重视产品在使用过程中的舒适度、易用性和情感体验。产品设计中的细节体验,看似微不足道,却往往能带来意想不到的效果。这是因为&…

leetcode每日一练-第108题-将有序数组转换为二叉搜索树

一、思路 递归 二、解题方法 在给定中序遍历序列数组的情况下,每一个子树中的数字在数组中一定是连续的,因此可以通过数组下标范围确定子树包含的数字,下标范围记为 [left,right]。对于整个中序遍历序列,下标范围从 left0到 ri…

1. CUDA中的grid和block

1. CUDA中的grid和block基本的理解 Kernel: Kernel不是CPU,而是在GPU上运行的特殊函数。你可以把Kernel想象成GPU上并行执行的任务。当你从主机(CPU)调用Kernel时,它在GPU上启动,并在许多线程上并行运行。 Grid: 当你…

SQL分类及通用语法数据类型

一、SQL分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的数据进行增删改DQL: 数据查询语言,用来查询数据库中表的记录DCL: 数据控制语言,用来创建数据库…

【2023年电赛】运动目标控制与自动追踪系统(E 题)最简单实现

本方案的思路是最简单的不涉及复杂算法:识别矩形框,标记矩形框,输出坐标和中心点,计算长度,控制舵机移动固定长度!仅供完成基础功能参考,不喜勿喷! # 实现运动目标控制与自动追踪系…

OPENCV C++(一) 二进制和灰度原理 处理每个像素点值的方法

#include <opencv2/opencv.hpp> using namespace std; using namespace cv;必须包含的头文件&#xff01; 才能开始编写代码 读取相片 一般来说加个保护程序 不至于出error和卡死 Mat image imread("test.webp"); //存放自己图像的路径 if (image.empty()){p…

Spring接口InitializingBean的作用和使用介绍

在Spring框架中&#xff0c;InitializingBean接口是一个回调接口&#xff0c;用于在Spring容器实例化Bean并设置Bean的属性之后&#xff0c;执行一些自定义的初始化逻辑。实现InitializingBean接口的Bean可以在初始化阶段进行一些必要的操作&#xff0c;比如数据的初始化、资源…

JSON动态生成表格

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><script>var fromjava"{\"total\":3,\"students\":[{\"name\":\"张三\",\&q…

9.物联网操作系统之软件定时器

一。软件定时器概念及应用 1.软件定时器定义 就是软件实现定时器。 2.FreeRTOS软件定时器介绍 如上图所示&#xff0c;Times的左边为设置定时器时间&#xff0c;设置方式可以为任务设置或者中断设置&#xff1b;Times的右边为定时器的定时相应&#xff0c;使用CalBack相应。 …

在excel中整理sql语句

数据准备 CREATE TABLE t_test (id varchar(32) NOT NULL,title varchar(255) DEFAULT NULL,date datetime DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; INSERT INTO t_test VALUES (87896cf20b5a4043b841351c2fd9271f,张三1,2023/6/8 14:06); INSERT INTO t_test …

war包方式安装linux和windows的geoserver

注意&#xff1a; 从Java 9开始&#xff0c;Oracle已经不再单独提供JRE&#xff08;Java Runtime Environment&#xff09;了&#xff0c;而是直接将JRE集成在JDK&#xff08;Java Development Kit&#xff09;中。这是因为JRE包含了运行Java程序所需的环境&#xff0c;而JDK除…

web服务

静态网页与动态网页的区别 在网站设计中&#xff0c;静态网页是网站建设的基础&#xff0c;纯粹 HTML 格式的网页通常被称为“静态网页”&#xff0c;静态网页是标准的 HTML 文件&#xff0c;它的文件扩展名是 .htm、.html&#xff0c;可以包含文本、图像、声音、FLASH 动画、…

【python】绘图代码模板

【python】绘图代码模板 pandas.DataFrame.plot( )画图函数Seaborn绘图 -数据可视化必备导入数据集可视化统计关系使用Seaborn绘制散点图抖动图箱线图小提琴图Pointplot群图 可视化数据集的分布绘制单变量分布柱状图直方图 绘制双变量分布Hex图KDE 图可视化数据集中的成对关系 …

【从零开始学习JAVA | 第三十八篇】应用多线程

目录 前言&#xff1a; 多线程的实现方式&#xff1a; Thread常见的成员方法&#xff1a; 总结&#xff1a; 前言&#xff1a; 多线程的引入不仅仅是提高计算机处理能力的技术手段&#xff0c;更是适应当前时代对效率和性能要求的必然选择。在本文中&#xff0c;我们将深入…

python+opencv实现显示摄像头,截取相关图片,录取相关视频

实时显示摄像头图像 按下空格键&#xff0c;截取图片 按下tab键&#xff0c;开始录制摄像内容&#xff0c;再次按下&#xff0c;结束录制 按下Esc键&#xff0c;关闭窗口 import cv2 import numpy#第几章图片 img_count0InitVideoFalse #第几个视频 video_count0 video_flagFa…