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

二十九、MongoDB(1)

🌻🌻 目录

  • 一、MongoDB简介
    • 1.1 什么是 MongoDB
    • 1.2 MongoDB特点
    • 1.3 MongoDB 体系结构
  • 二、下载与安装
    • 2.1 MongoDB下载
    • 2.2 在Linux 上的安装
      • 2.2.1 安装前的准备
      • 2.2.2 开始安装
      • 2.2.3 测试软链接启动
    • 2.3 在windows上的安装
  • 三、基本增删改查操作
    • 3.1 选择或创建数据库
    • 3.2 插入文档
    • 3.3 查询集合
    • 3.4 修改文档
    • 3.5 删除文档

建议可忽略理论直接下载安装

文章总结MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。

通过学习,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。

MongoDB官方英文文档

MongoDB官方中文文档

一、MongoDB简介

1.1 什么是 MongoDB

MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

在这里插入图片描述

1.2 MongoDB特点

MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。

具体特点总结如下:

  • (1)面向集合存储,易于存储对象类型的数据
  • (2)模式自由
  • (3)支持动态查询
  • (4)支持完全索引,包含内部对象
  • (5)支持复制和故障恢复
  • (6)使用高效的二进制数据存储,包括大型对象(如视频等)
  • (7)自动处理碎片,以支持云计算层次的扩展性
  • (8)支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++语言的驱动程序,社区中也提供了对 Erlang 及.NET 等平台的驱动程序
  • (9) 文件存储格式为 BSON(一种 JSON 的扩展)

1.3 MongoDB 体系结构

MongoDB 的逻辑结构是一种层次结构。主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。逻辑结构是面向用户
的,用户使用 MongoDB 开发应用程序使用的就是逻辑结构。

  • (1)MongoDB 的文档(document),相当于关系数据库中的一行记录。
  • (2)多个文档组成一个集合(collection),相当于关系数据库的表。
  • (3)多个集合(collection),逻辑上组织在一起,就是数据库(database)。
  • (4)一个 MongoDB 实例支持多个数据库(database)。
    文档(document)、集合(collection)、数据库(database)的层次结构如下图:

在这里插入图片描述

MySQLMongoDB对比

MongoDb关系型数据库Mysql
数据库(databases)数据库(databases)
集合(collections)表(table)
文档(document)行(row)

在这里插入图片描述

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
嵌入文档MongoDB通过嵌入式文档来替代多表连接
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

二、下载与安装

2.1 MongoDB下载

下载安装包

  • MongoDB官网 下载安装 (无需登录如下图)
  • 本地资源库下载获取

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

根据上图所示下载 zip 包。
提示:版本的选择:
MongoDB的版本命名规范如:x.y.z
y为奇数时表示当前版本为开发版,如:1.5.2、4.1.13;
y为偶数时表示当前版本为稳定版,如:1.6.3、4.0.10;
z是修正版本号,数字越大越好。一般使用稳定版
详情 mongodb中文文档

2.2 在Linux 上的安装

2.2.1 安装前的准备

(1)VMware-workstation-full-12.1.0-3272444VMware 12 专业版

(2)虚拟机所使用镜像:CentOS-7-x86_64-Minimal-1708.iso

(3)mongodb: mongodb-linux-x86_64-rhel70-4.0.9.tgz(与上面资源库一致)

2.2.2 开始安装

1、上传下载回来的安装包到LINUX服务器

在这里插入图片描述

2、解压缩安装包到 /usr/local

tar -xvf mongodb-linux-x86_64-rhel70-4.0.9.tgz -C /usr/local

在这里插入图片描述

3、对解压目录重新命名

cd /usr/localmv mongodb-linux-x86_64-rhel70-4.0.9 mongodbrm -rf mongodb-linux-x86_64-rhel70-4.0.9.tgz

在这里插入图片描述

4、创建数据库目录

  • MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。
    以下实例中我们将data目录创建于根目录下,即 /usr/local下面(/)。
    注意:/data/db 是 MongoDB 默认的启动的数据库路径(--dbpath)。
mkdir /data/db -p

在这里插入图片描述

5、启动MongoDB服务

  • 进入mongodb的bin目录
    输入命令:./mongod

在这里插入图片描述

6、进入MongoDB后台管理 Shell

  • 另起一个终端,进入目录 cd /usr/local/mongodb/bin
    输入命令:./mongo
    即可进入MongDB后台管理Shell

在这里插入图片描述

由于它是一个JavaScript shell,您可以运行一些简单的算术运算:

2+2
4
3+6
9

在这里插入图片描述

注意:可以将客户端mogo文件在/bin下软链接,方便随处执行:

ln  -s  /usr/local/mongodb/bin/mongo /bin/mongo

在这里插入图片描述
在这里插入图片描述

2.2.3 测试软链接启动

我们另外打开命令提示符窗口,如果mongoDB是按默认的端口启动的,并且是部署在本机的。输入命令 mongo 即可登陆系统

在这里插入图片描述

从界面输出的信息我们可以得知,它默认连接的是test数据库

  • 如果是要连接远程的mongoDB服务器 ,就输入命令
mongo 远程IP地址

如果远程的mongoDB服务端口不是默认的,需要输入命令

mongo 远程IP地址:端口

输入exit命令可退回到命令提示符

2.3 在windows上的安装

① 第一步:解压安装启动

将压缩包解压到一个目录中。
在解压目录中,手动建立一个目录用于存放数据文件,如 data/db

在这里插入图片描述

  • 方式1:命令行参数方式启动服务(调试建议使用)
    在 bin 目录中打开命令行提示符,输入cmd再输入如下命令:
mongod --dbpath=..\data\db

在这里插入图片描述
在这里插入图片描述

我们在启动信息中可以看到,mongoDB的默认端口是27017,如果我们想改变默认的启动端口,可以通过--port来指定端口。
为了方便我们每次启动,可以将安装目录的bin目录设置到环境变量的path中, bin 目录下是一些常用命令,比如 mongod 启动服务用的,mongo 客户端连接服务用的。

在这里插入图片描述

直接打开命令窗口测试:

在这里插入图片描述
在这里插入图片描述

windows 版本的安装步骤

🔷下载 .msi 文件,下载后双击该文件,按操作提示安装即可。
🔷 安装过程中,可以通过点击"Custom(自定义)”按钮来设置 MongoDB 数据库程序安装目录,也可以使用默认目录。
🔷下-步安装“install mongoDBcompass"不勾选(勾选需要联网下载Compass软件,可能需要更久的安装时间)

  • 🔷 MongoDBCompass 是一个图形界面管理工具,我们可以在后面自己到官网下载安装
  • 🔷 在初学者阶段,强烈建议不安装 MongoDBCompass,使用命令行在操作 MongoDB类据库,以此来提高我们的编程能力,且有助于我们在编程语言中操作 MongoDB.

🔷 在安装过程中选择installMongoDBasservice,是将 mongo 注册为系统服务(由此可以开机自启动及后台运行)

三、基本增删改查操作

3.1 选择或创建数据库

使用use 数据库名称即可选择数据库,如果该数据库不存在会自动创建

use mydb

在这里插入图片描述

3.2 插入文档

文档相当于关系数据库中的记录

  • 首先我们定义一个文档变量,格式为变量名称={}; 例如:
  • 接下来就是将这个变量存入MongoDB
  • 格式为:db.集合名称.save(变量);
  • 这里的集合就相当于关系数据库中的表。如下所示:
    这样就在mydb集合中存入文档。如果这个mydb集合不存在,就会自动创建。
    当然,你也可以不用定义变量,直接把变量值放入save方法中也是可以地。

3.3 查询集合

我们要查询某集合的所有文档,使用find()方法。语法格式为:

  • db.集合名称.find();
    例如,我们要查询mydb集合中的所有文档如下所示:

这里你会发现每条文档会有一个叫_id的字段,这个相当于我们原来关系数据库中表的主键,当你在插入文档记录时没有指定该字段,MongDB会自动创建,其类型是ObjectID类型。
如果我们在插入文档记录时指定该字段也可以,其类型可以使ObjectID类型,也可以是MongoDB支持的任意类型. 例如:

use mydbdb.userList.save({"id":1001,"name":"Daniel","age":22,"address":"shanghai"});
db.userList.save({"id":1002,"name":"hollow","age":42,"address":"xian"});
db.userList.save({"id":1003,"name":"Jenny","age":32,"address":"shenzhen"});
db.userList.save({"id":1004,"name":"Wdny","age":33,"address":"gansu"});db.userList.find();

在这里插入图片描述

如果我想按一定条件来查询,比如我想查询id为“1003”的记录,怎么办?很简单!
只要在find()中添加参数即可,参数也是json格式,如下:

db.userList.find({id:1003});

在这里插入图片描述

为了避免游标可能带来的开销,MongoDB还提供了一个叫findOne()的方法,用来返回结果集的第一条记录。

db.userList.findOne({id:1003});

在这里插入图片描述

id为1003的有很多条,这里只返回了一条记录。
当我们需要返回查询结果的前几条记录时,可以使用limit方法,例如:

db.userList.find().limit(3);

在这里插入图片描述

3.4 修改文档

我们要想修改记录,可以使用update$set方法 .
例如:我先将姓名为Daniel的用户文档中的age字段值改为88,执行下列语句

db.userList.update({name:"Daniel"},{$set:{age:88}});

在这里插入图片描述

3.5 删除文档

删除文档使用remove()方法,格式为:

  • db.集合名称.remove( 条件 );

请慎用remove({}), 它会一条不剩地把你的集合所有文档删的干干净净。
我们现在演示一下,删除name为“hollow”的记录:

db.userList.remove({name:"hollow"});

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 万界星空科技QMS系统:全面升级企业质量管理的利器
  • 用C34PRO打造一套高端性能主机
  • JavaFX布局-ButtonBar
  • 【Android】安卓四大组件之Service用法
  • QT生成.exe文件无法在未安装QT的电脑上运行的解决办法
  • CP AUTOSAR标准之DefaultErrorTracer(AUTOSAR_SWS_DefaultErrorTracer)(更新中……)
  • 视频监控汇聚平台LntonCVS视频监控管理平台解决方案和常见的接入方式
  • 黑神画Ⅱ--Unix 是下一代人工智能的模板吗?
  • ios 5.5寸、ipad13英寸如何截屏
  • 网络安全-渗透测试工具及插件介绍和使用方法
  • RabbitMQ:发送者的可靠性之配置发送者重试机制
  • 在 Linux 系统中下载 Python 并配置环境
  • 使用GPT-4o mini融合GraphRAG技术进行实战应用
  • 鸿蒙媒体开发【拼图】拍照和图片
  • Flask数据库操作(第四阶段)
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2019年如何成为全栈工程师?
  • Angular 响应式表单 基础例子
  • Date型的使用
  • es6(二):字符串的扩展
  • gitlab-ci配置详解(一)
  • Laravel 实践之路: 数据库迁移与数据填充
  • ng6--错误信息小结(持续更新)
  • quasar-framework cnodejs社区
  • Rancher如何对接Ceph-RBD块存储
  • uva 10370 Above Average
  • 测试开发系类之接口自动化测试
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 多线程事务回滚
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 全栈开发——Linux
  • 如何使用 JavaScript 解析 URL
  • 双管齐下,VMware的容器新战略
  • 正则表达式-基础知识Review
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • # 数论-逆元
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #define与typedef区别
  • (3)nginx 配置(nginx.conf)
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (算法)硬币问题
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • @component注解的分类
  • @staticmethod和@classmethod的作用与区别
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [20150629]简单的加密连接.txt
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [ARC066F]Contest with Drinks Hard
  • [BetterExplained]书写是为了更好的思考(转载)
  • [BUUCTF 2018]Online Tool(特详解)
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)