二十九、MongoDB(1)

🌻🌻 目录

  • 一、MongoDB简介
    • [1.1 什么是 MongoDB](#1.1 什么是 MongoDB)
    • [1.2 MongoDB特点](#1.2 MongoDB特点)
    • [1.3 MongoDB 体系结构](#1.3 MongoDB 体系结构)
  • 二、下载与安装
    • [2.1 MongoDB下载](#2.1 MongoDB下载)
    • [2.2 在Linux 上的安装](#2.2 在Linux 上的安装)
      • [2.2.1 安装前的准备](#2.2.1 安装前的准备)
      • [2.2.2 开始安装](#2.2.2 开始安装)
      • [2.2.3 测试软链接启动](#2.2.3 测试软链接启动)
    • [2.3 在windows上的安装](#2.3 在windows上的安装)
  • 三、基本增删改查操作
    • [3.1 选择或创建数据库](#3.1 选择或创建数据库)
    • [3.2 插入文档](#3.2 插入文档)
    • [3.3 查询集合](#3.3 查询集合)
    • [3.4 修改文档](#3.4 修改文档)
    • [3.5 删除文档](#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术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
嵌入文档 MongoDB通过嵌入式文档来替代多表连接
primary key primary key 主键,MongoDB自动将_id字段设置为主键

二、下载与安装

2.1 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

xml 复制代码
tar -xvf mongodb-linux-x86_64-rhel70-4.0.9.tgz -C /usr/local

3、对解压目录重新命名

xml 复制代码
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)。
xml 复制代码
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下软链接,方便随处执行:

xml 复制代码
ln  -s  /usr/local/mongodb/bin/mongo /bin/mongo


2.2.3 测试软链接启动

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

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

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

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

xml 复制代码
mongo 远程IP地址:端口

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

2.3 在windows上的安装

① 第一步:解压安装启动
将压缩包解压到一个目录中。

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

  • 方式1:命令行参数方式启动服务(调试建议使用)
    在 bin 目录中打开命令行提示符,输入cmd再输入如下命令:
xml 复制代码
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 数据库名称即可选择数据库,如果该数据库不存在会自动创建

xml 复制代码
use mydb

3.2 插入文档

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

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

3.3 查询集合

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

  • db.集合名称.find();
    例如,我们要查询mydb集合中的所有文档如下所示:
    这里你会发现每条文档会有一个叫_id的字段,这个相当于我们原来关系数据库中表的主键,当你在插入文档记录时没有指定该字段,MongDB会自动创建,其类型是ObjectID类型。

如果我们在插入文档记录时指定该字段也可以,其类型可以使ObjectID类型,也可以是MongoDB支持的任意类型. 例如:

sql 复制代码
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格式,如下:

sql 复制代码
db.userList.find({id:1003});

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

sql 复制代码
db.userList.findOne({id:1003});

id为1003的有很多条,这里只返回了一条记录。

当我们需要返回查询结果的前几条记录时,可以使用limit方法,例如:

sql 复制代码
db.userList.find().limit(3);

3.4 修改文档

我们要想修改记录,可以使用update$set方法 .

例如:我先将姓名为Daniel的用户文档中的age字段值改为88,执行下列语句

sql 复制代码
db.userList.update({name:"Daniel"},{$set:{age:88}});

3.5 删除文档

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

  • db.集合名称.remove( 条件 );
    请慎用remove({}), 它会一条不剩地把你的集合所有文档删的干干净净。

我们现在演示一下,删除name为"hollow"的记录:

sql 复制代码
db.userList.remove({name:"hollow"});
相关推荐
云和数据.ChenGuang25 分钟前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys1 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi1 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据2 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi3 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀3 小时前
Redis梳理
数据库·redis·缓存
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天3 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺4 小时前
分布式系统架构:服务容错
数据库·架构
独行soc5 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘