二十九、MongoDB(1)

news2024/11/15 8:31:53

🌻🌻 目录

  • 一、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/local

mv mongodb-linux-x86_64-rhel70-4.0.9 mongodb

rm -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 mydb

db.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"});

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

lvs防火墙mark标记解决调度问题

实验环境是在之前部署DR模式集群的基础上做的,参考如下 部署DR模式集群 以http和https为例,当我们在webserver中同时开放80和443端口,那么默认控制是分开轮询的,就会出现了一个轮询错乱的问题: 当第一次访问80被轮询…

浅谈基础的图算法——Tarjan求强联通分量算法(c++)

文章目录 强联通分量SCC概念例子有向图的DFS树代码例题讲解[POI2008] BLO-Blockade题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 思路AC代码 【模板】割点(割顶)题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示…

【论文分享】测量城市夜间活力及其与城市空间结构的关系:一种数据驱动的方法

近年来,夜间活力作为反映城市经济和生活质量的重要指标受到关注。本次我们给大家带来一篇SCI论文的全文翻译。该论文采用了数据驱动的方法来测量夜间活力,并探索了其与城市空间结构的关系。该论文派生的洞见可以帮助制定空间策略,以增强夜间活…

微信小程序 - 自定义底部菜单栏

微信小程序底部菜单栏是可以通过自定义来实现的。主要涉及:新建组件、编写组件代码、设置样式、配置导航栏、在页面中引用。自定义底部导航栏可以创建出符合项目设计需求效果,实现个性化的页面切换功能。 如下图效果,为比较常见的中间突出半圆…

2-58 基于matlab的图像处理 GUI 程序

基于matlab的图像处理 GUI 程序,功能包括裁剪、 旋转和翻转图像。 更改曝光、 对比度和饱和度, 黑白、 灰度等常见处理效果。程序已调通,可直接运行。 2-58 图像处理 GUI 程序 - 小红书 (xiaohongshu.com)

同享人力资源管理系统-TXEHR V15 hdlUploadFile.ashx 文件上传致RCE漏洞复现

0x01 产品简介 同享人力资源管理系统(TXEHR V15)是一款专为现代企业设计的人力资源管理软件解决方案,旨在通过先进的信息化手段提升企业人力资源管理的效率与水平。该系统集成了组织人事、考勤管理、薪资核算、招聘配置、培训发展、绩效管理等核心模块,并提供了灵活的配置…

大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: HadoopHDFSMapReduceHiveFlumeSqoopZookeeperHBaseRedis (正在更新) 章节内容 上一…

高校实验室预约系统的设计与实现-计算机毕业设计源码58031

摘要 随着信息技术的不断发展,高校实验室资源的管理和利用愈发重要。为了提高实验室资源的利用率和管理效率,我们设计并实现了一款基于Spring Boot框架的高校实验室预约系统。 本系统旨在为学生提供一个便捷、高效的途径来预约实验室资源,并为…

html+css+js网页设计星巴克作业2个页面(带js)

htmlcssjs网页设计 星巴克作业2个页面(带js) 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#…

Linux系统驱动(九)IO模型---异步通知IO模型

文章目录 一、概念二、异步通知IO模型驱动实现(一)异步通知IO模型实现1. fcntl(fd,F_GETFL)调用流程2. fcntl(fd,F_SETFL,flags|FASYNC)3. fcntl(fd,F_SETOWN,getpid()) (二)驱动层提供异步通知模型1. 驱动层中实现异步通知IO模型…

基于QT实现的简易WPS(已开源)

一、开发工具及开源地址: 开发工具:QTCreator ,QT 5 开源地址: GitHub - Whale-xh/WPS_official: Simple WPS based on QTSimple WPS based on QT. Contribute to Whale-xh/WPS_official development by creating an acc…

【JavaEE初阶】定时器

📕 引言 定时器是什么? 定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”. 达到一个设定的时间之后, 就执行某个指定好的代码 定时器是一种实际开发中非常常用的组件.比如网络通信中, 如果对方 500ms 内没有返回数据, 则断开连接尝试重连.比如…

CTFHUB-web-RCE-过滤目录分隔符

开启题目 从源码发现管道符被过滤,使用分号 ;分隔符,拼接执行注入,发现了 flag 的可疑文件 127.0.0.1;ls 查看 flag_is_here,发现有一个flag_12069946857.php 127.0.0.1;ls flag_is_here 查看flag_12069946857.php&a…

react项目中使用redux和reduxjs/toolkit案例

1、安装依赖 npm i react-redux reduxjs/toolkit2、在store/modules文件夹中新建todo.js (billSlice.js) // 账单列表 import { createSlice } from reduxjs/toolkit import axios from axiosconst billStore createSlice({name: billStore,// 数据状态…

零基础学习Python(五)

1. 数据描述符与非数据描述符 首先,描述符只能作用于类属性,如果将描述符作用于对象属性,则不会生效。 class D:def __get__(self, instance, owner):print("~get")class C:def __init__(self):self.x D() 应该将D对象赋值给类C…

72.树形列表绑定对应的右键菜单

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:易道云信息技术研究院 上一个内容:71.对象数据存储设计 以 71.对象数据存储设计 它的代码为基础进行修改 效果图&#xf…

后端常见问题及深度解决方案

🐟作者简介:一名大三在校生,喜欢编程🪴 🐡🐙个人主页🥇:Aic山鱼 🐠WeChat:z7010cyy 🦈系列专栏:🏞️ 前端-JS基础专栏✨前…

linux脚本: 检测多个服务端口是否处于侦听状态或监听状态

目录 一、背景 1、系统监控和健康检查 2、安全性评估 3、故障排查 4、合规性检查 5、资源管理 6、服务依赖性检查 二、需求和分析 1、需求 2、分析 三、脚本文件 1. 创建脚本文件 2. 编写脚本代码 3、代码解释 (1)定义要检查的端口列表 …

视觉全能!自回归要反超扩散?Lumina-mGPT:任意分辨率丝滑逼真图像生成(上海AI Lab)

文章链接:https://arxiv.org/pdf/2408.02657 git链接:https://github.com/Alpha-VLLM/Lumina-mGPT 亮点直击 通过多模态生成预训练的自回归Transformer,而不是从头训练,可以作为逼真的文本到图像生成和视觉与语言任务统一的有效初…

Linux shell编程:监控进程CPU使用率并使用 perf 抓取高CPU进程信息

0. 概要 本文将介绍一个用于监控一组进程CPU使用率的Shell脚本,,当检测到某进程的CPU使用率超出阈值时,使用 perf 工具抓取该进程的详细信息。 本shell脚本为了能在普通嵌入式系统上运行做了妥协和优化。 1. shell脚本流程的简要图示&#…