MongoDB

目录

前言

一、概述

二、安装

三、目录结构

四、Mongo数据库操作与备份

(一)、库操作

(二)、文档操作

(三)、备份命令

(四)、恢复命令

总结



前言

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

一、概述

mongodb是一个nosql数据库,它有高性能、无模式、文档型的特点。是nosql数据库中功能最丰富,最像关系数据库的。数据库格式为BSON

相关概念

实例:系统上运行的mongodb的进程,类似于mysql实例;

库:每个数据库都是独立的,有自己的用户,权限,独立存储集合,类似于mysql的库;

集合:由一组文档构成,类似于mysql的表;

文档:mongodb数据库的最小数据集,是由多个键值对有序组合的数据单元,类似于mysql的数据记录;
主键

唯一标识一行数据

特性

1、面向集合文档存储,适合存储json形式的数据;

2、格式自由,数据格式不固定,数据结构发生变更的同时不会影响程序运行;

3、面向对象的sql查询语句,基本涵盖关系型数据库的所有查询语句;

4、有索引的支持,查询效率更快;(高效的记录查询)

5、支持复制和自动故障转移;

6、可以使用分片集群提升查询性能

应用场景
游戏

MongoDB存储游戏用户信息,用户装备、积分等直接以内嵌文档的形式存储,方便查询,更新。

物流

MongoDB存储订单信息,订单状态在运送过程中会不断更新,以内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。

社交

MongoDB的高性能和可扩展性使其成为构建社交网络和博客平台的理想数据库。它可以存储用户数据、动态内容、评论等,并支持实时的查询和更新。

物联网

MongoDB适用于存储和处理物联网设备产生的大量数据。它可以存储传感器数据、设备状态、日志等,并提供强大的查询功能,帮助用户实时监控和分析物联网设备的数据。

视频直播

使用MongoDB存储用户信息,礼物信息等。

大数据

MongoDB适用于存储和处理大量的非结构化数据,例如日志、传感器数据、推荐系统数据等。它提供了灵活的文档模型和强大的查询功能,可以更快地处理和分析大规模数据。

二、安装

RPM安装

配置本地源

cd /etc/yum.repos.d

vim mongo.repo

[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

yum install -y mongodb-org

systemctl start mongod.service

netstat -anptu |grep mongodb

三、目录结构

1.rpm -ql mongodb-org-server

/etc/mongod.conf 主配置文件

port: 27017 监听端口号

bindIp: 127.0.0.1 监听地址

/run/mongodb PID文件

/usr/bin/mongod 启动命令

/var/lib/mongo 存储数据文件

/var/log/mongodb 日志

2.rpm -ql mongodb-org-shell

/usr/bin/mongo 客户端命令

3.rpm -ql mongodb-org-tools

/usr/bin/mongodump 备份数据库

/usr/bin/mongoexport 备份文档

/usr/bin/mongoimport 恢复文档

/usr/bin/mongorestore 恢复数据库

默认数据库

admin:

从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。

一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

local:

这个数据库永远不会被复制,可以用来存储限于本地单台服务器的任意集合。

config:

当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

四、Mongo数据库操作与备份

(一)、库操作

查看数据库

show databases或show dbs

显示当前所在数据库

db

切换数据库

use dbName

数据库创建

隐式创建(无集合创建后不会显示)

不用主动创建,使用use newDB,会自动创建不存在的数据库

只有在库中创建集合后才会保存,并使用show dbs查看到

输入错误会显示报错

删除数据库

use dbName

db.dropdatabase()

(二)、文档操作

不区分大小写,可补齐

创建集合

db.createCollection("test")

查看集合

show tables

删除集合

db.需要删除的集合名称.drop()

插入数据(文档)

db.集合名称.insert({key:value}) 单行

db.集合名称.insertMany([{key:value},{key:value},{key:value}]) 多行

mongodb默认数字的数据类型float浮点型,若要改变为NumberInt(数字)的必须先key:NumberInt(数字)

查询数据

全集合查询

db.集合名称.find({})或者

db.集合名称.find()

条件查询

db.my.find({查询条件1key:value,查询条件2,...},{key1:1|0,key2:1|0,...})

key:1 显示,key:0 不显示

当显示的key只有一个时,key:1 只显示该key及对应value,key:0 显示除了该key之外其他所有keyvalue

查询集合中有多少文档

db.集合名称.count()

删除数据

全文删除

db.集合名称.remove({})

条件删除

db.集合名称.remove({key:value})

更新数据

注意没有带NumberInt创建数值的值,不能更改为NumberInt数值

所有满足条件的文档都进行更新

db.my.update({'id':1},{$set:{'id':10}},{multi:true})

更新文档进行数值更新

db.my.update({'id':1},{$inc:{'id':NumberInt(10)}}) NumberInt可不写

(三)、备份命令

mongodump

选项

-h=hostname:port

-u=<username>

-p=<password>

--authenticationDatabase=<dbname>

-d=<database>

-o=<path>

语法

mongodump -d dbName -h hostName:port -u userName -p Password -o backupDirectory

本地不需要-h -u -p

mongoexport

选项

-h=hostname:port

-u=<username>

-p=<password>

--authenticationDatabase=<dbname>

-d=<database>

-o=<path>

语法

mongoexport -d dbName -c tableName -h hostName:port -u userName -p Password -o backupDirectory/jsonFile.json

本地不需要-h -u -p

(四)、恢复命令

mongorestore

选项

-h=hostname:port

-u=<username>

-p=<password>

--authenticationDatabase=<dbname>

-d=<database>

--drop 当目标数据库中存在同名集合则删除再恢复

语法

mongorestore -h hostName -u username -p password -d dbName -c tableName bakcupDirector/bsonFile

本地不需要-h -u -p

mongoimport

选项

-h=hostname:port

-u=<username>

-p=<password>

--authenticationDatabase=<dbname>

-d=<database>

--drop 当目标数据库中存在同名集合则删除再恢复

语法

mongoimport -d dbName -c tableName -h hostName:port -u userName -p Password backupDirectory/jsonFile.json

本地不需要-h -u -p

备份文件名也可以是my.json


总结

今天的内容要绝对的认真才可以,稍微差一个()、[]、{}、属性都可能出错。一定要看懂理解了再去上手,否则很容易卡壳,属于非关系型数据库,但功能却介于关系型(MySQL)和非关系型(Redis)两者之间。

相关推荐
JH307315 分钟前
Oracle与MySQL中CONCAT()函数的使用差异
数据库·mysql·oracle
蓝染-惣右介17 分钟前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
冷心笑看丽美人18 分钟前
Spring框架特性及包下载(Java EE 学习笔记04)
数据库
武子康1 小时前
Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据库·sql·mybatis·springboot
代码吐槽菌2 小时前
基于SSM的毕业论文管理系统【附源码】
java·开发语言·数据库·后端·ssm
路有瑶台2 小时前
MySQL数据库学习(持续更新ing)
数据库·学习·mysql
数字扫地僧2 小时前
WebLogic 版本升级的注意事项与流程
数据库
Viktor_Ye2 小时前
高效集成易快报与金蝶应付单的方案
java·前端·数据库
Rverdoser3 小时前
Linux环境开启MongoDB的安全认证
linux·安全·mongodb
努力算法的小明3 小时前
SQL 复杂查询
数据库·sql