当前位置:网站首页>MongoDB construction and basic operations
MongoDB construction and basic operations
2022-08-05 00:33:00 【A change of wind and snow】
文章目录
引言
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.分布式文件系统的设计基于客户机/服务器模式.一个典型的网络可能包括多个供多用户访问的服务器.另外,对等特性允许一些系统扮演客户机和服务器的双重角色.
一、MongoDB概述
1、什么是MongoDB
- MongoDB是由C++语言编写的开源数据库系统
- 在高负载的情况下,添加更多的节点,可以保证服务器性能
- MongoDB旨在为web应用提供可扩展的高性能数据存储解决方案.
- MongoDB将数据存储为一个文档.
- MongoDB是一个基于分布式文件存储的数据库.
2、MongoDB的特点
- 面向集合存储,易存储对象类型的数据.
- 模式自由
- 支持动态查询
- 可通过网络访问
- 支持查询
- 支持复制和故障恢复
- 支持完全索引,包含内部对象
- 文件存储格式为BSON(一种JSON的扩展)
- 自动处理碎片,以支持云计算层次的扩展性
- 使用高效的二进制数据存储,包括大型对象
- 支持Golang,RUBY,Python,JAVA,C++,PHP,C#等多种语言
- MongoDB安装简单
3、MongoDB适用场景
**MongoDB 的主要目标是在键/值存储方式和传统的 RDBMS 系统之间架起一座桥梁,它集两者的优势于一身.**根据官方网站的描述,MongoDB 适用于以下场景.
- 网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性.
- 缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层.在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载.
- 高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对MapReduce引擎的内置支持.
- 用于对象及 JSON 数据的存储:Mongo 的 BSON 数据格式非常适合文档化格式的存储及查询.
MongoDB 的使用也会有一些限制,例如:它不适合于以下几个地方.
- 高度事务性的系统:例如银行或会计系统.传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序.
- 传统的商业智能应用:针对特定问题的 BI 数据库会产生高度优化的查询方式.对于此类应用,数据仓库可能是更合适的选择.
- 需要 SQL 的问题.
4、MongoDB概念解析
SQL 术语/概念 | MongoDB 术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB 不支持 | |
primary key | primary key | 主键,MongoDB 自动将 _id 字段设置为主键 |
二、搭建MongoDB
1、关闭系统防火墙和安全机制
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2、配置mongodb源仓库
vim /etc/yum.repos.d/mongodb-org.repo
[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
#清除元数据缓存并且加载元数据缓存
yum clean all
yum makecache
3、安装mongodb
yum install -y mongodb-org
4、编辑配置文件
vim /etc/mongod.conf
10 path: /var/log/mongodb/mongod.log #系统日志文件存放位置
14 dbPath: /var/lib/mongo #数据存储位置
24 pidFilePath: /var/run/mongodb/mongod.pid #进程管理,pid文件存放位置
25 timeZoneInfo: /usr/share/zoneinfo
26
27 # network interfaces
28 net:
29 port: 27017 #默认端口号
30 bindIp: 0.0.0.0 #监听地址,监听所有人0.0.0.0
5、进入mongodb
mongo
6、生成第2个实例
cd /etc
cp -p mongod.conf mongod2.conf
修改配置文件
创建目录
mkdir -p /data/mongodb
touch /data/mongodb/mongod2.log
mkdir -p /data/mongodb/mongo
启动新实例
mongod -f /etc/mongod2.conf
7、检测mongod端口
netstat -antp | grep mongod
8、进入新实例
mongo --port 27018
三、mongoDB数据库基本操作
#查看mongoDB版本
db.version()
#查看服务器内数据库
show dbs
#创建数据库,mongoDB数据库创建直接使用use即可,如果不在库内创建集合,退出时自动删除该库
use school
#创建集合(表),是json格式,以键值对方式存储
db.createCollection('集合名') #此时show dbs,school库就会出现
#查看集合
show tables
或
show collections
#查看集合数据
db.集合名.find() #条件可写在()内,不写默认查看全部,一页最多显示20条,按it继续查看
#在集合中插入数据,json格式,键值对,字符串加双引号
db.lcdb.insert({
"id":1,"name":"lichen","hobby":"See black silk"})
db.lcdb.find()
#循环插入,+号可以连接字符串,直接将+号后面的内容转换为字符串衔接
for(i=2;i<=100;i++) db.lcdb.insert({
"id":i,"name":"lichen"+i,"hobby":"See black silk"+i})
db.lcdb.find()
#横向查看指定条件数据信息
db.abc.find({
"id":1})
#竖向查看指定条件数据信息
db.abc.findOne({
"id":1})
#查看每个字段的数据类型,例:可以为第一条数据加一个别名
a=db.abc.findOne({
"id":1})
typeof(a.id)
typeof(a.name)
typeof(a.hobby)
-------------------------
> typeof(a.id)
number
> typeof(a.name)
string
> typeof(a.hobby)
string
#更改指定条件数据
> db.lcdb.update({
"id":5},{
$set:{
"name":"liyong"}})
WriteResult({
"nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>
>
> db.lcdb.find({
"id":5})
{
"_id" : ObjectId("62e6ae64760b90d3342dbf92"), "id" : 5, "name" :
"liyong", "hobby" : "See black silk5" }>
#删除指定数据
> db.lcdb.remove({
"id":5})
WriteResult({
"nRemoved" : 1 })
> db.lcdb.find({
"id":5})
#删除集合
例:先创建一个新的集合,我们之前的abc后面要用
db.createConllection('qwe')
show tables
show collections
db.qwe.drop()
#删除数据库,首先进这个要删的数据库,然后db.dropDatabase()
例:
use myschool
db.createCollection('wawa')
show dbs
db.dropDatabase()
show dbs
四、数据库导出导入、备份恢复操作
1、数据库导出
===============
导出 mongoexport
===============
exit
#命令行模式下,-d指定数据库,-c指定数据表,-o表示输出
mongoexport -d school -c lcdb -o /home/lcdb.json
#此时cat /home/lcdb.json,你会发现空的
cat /home/lcdb.json
#因为,正常情况都是默认端口27017的库优先级高,所以指定端口不要忘
mongoexport --port 27018 -d school -c lcdb -o /home/lcdb.json
cat /home/lcdb.json
#-q指定条件,eq等于、ne不等于、gt大于、lt小于、ge大于等于、le小于等于,都可以使用
mongoexport --port 27018 -d school -c abc -q '{"id":{"$eq":10}}' -o /opt/10.json
cat /opt/10.json
2、数据库导入
===============
导入 mongoimport
===============
#导入的库和表都可以不存在
mongoimport --port 27018 -d lichen -c abc --file /home/lcdb.json
#验证
mongo --port 27018
show dbs
use lichen
show tables
db.abc.find()
===============
指定条件 导出
===============
exit
3、数据备份
==============
数据备份
==============
mkdir /backup
#使用mongodump -d指定要保存的库,同理-c指定要保存的库中表
mongodump --port 27018 -d school -o /backup
cd /backup
ls
cd school
ls
保存的类型:bson
4、数据恢复
=============
恢复还原
=============
mongorestore --port 27017 -d zb --dir=/backup/school
mongo --port 27017
show dbs
use zb
show tables
五、复制数据库
例:
mongo --port 27018
#将school数据库复制为share数据库
> db.copyDatabase("school","share")
{
"ok" : 1 }
> show tables
lcdb
> show dbs
admin 0.000GB
config 0.000GB
lichen 0.000GB
local 0.000GB
school 0.000GB
share 0.000GB
test 0.000GB
> use share
switched to db share
> show tables
lcdb
六、克隆集合
例:
exit
#再创建两个实例,后面要用到
#创建多实例的数据目录
mkdir -p /data/mongodb/mongodb{
3,4}
#日志文件目录
mkdir -p /data/mongodb/logs
#创建日志文件,并赋权777
cd /data/mongodb/logs
touch mongodb{
3,4}.log
chmod 777 *
#修改多实例配置文件
cd /etc
cp -p mongod.conf mongod3.conf
cp -p mongod.conf mongod4.conf
vim mongod3.conf
10 path: /data/mongodb/logs/mongodb3.log
14 dbPath: /data/mongodb/mongodb3
29 port: 27019
vim mongod4.conf
10 path: /data/mongodb/logs/mongodb4.log
14 dbPath: /data/mongodb/mongodb4
29 port: 27020
#启动这两个实例(开启mongod服务)
mongod -f /etc/mongod3.conf
mongod -f /etc/mongod4.conf
#查看端口
netstat -natp | grep mongod
开始克隆
#开始克隆
#这里进入27019
mongo --port 27019
#克隆来自192.168.109.14:27018服务中的school库中的abc表
> db.runCommand({
"cloneCollection":"school.lcdb","from":"192.168.109.14:27018"})
{
"ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
school 0.000GB
> use school
switched to db school
> show tables
lcdb
> db.lcdb.find()
{
"_id" : ObjectId("62ea97e47644dc941b1f4e11"), "id" : 1, "name" : "lichen", "hobby"
: "black belly" }{
"_id" : ObjectId("62ea97fa7644dc941b1f4e12"), "id" : 1, "name" : "liyong", "hobby"
: "卷王" }>
七、创建管理用户
mongoDB中自带一个admin库
在这个库中创建
例:
>use admin
#创建用户,用户名:root,密码:123456,身份:管理员
> db.createUser({
"user":"root","pwd":"123456","roles":["root"]})
Successfully added user: {
"user" : "root", "roles" : [ "root" ] }
> show tables
system.users
system.version
> db.auth("root","123456")
1
#使用db.auth("root","123456")进行验证,成功返回1,失败返回0
八、进程管理
db.currentOp()
"opid" : 26345,
#其中一大段中,关注opid,如果想结束这个进程就,db.killOp(26345)即可
#但是关闭这个进程不代表退出数据库,相当于将当前进程初始化释放,关了之后又开启了,相当于一个优化操作
边栏推荐
- 软件测试面试题:您如何看待软件过程改进?在您曾经工作过的企业中,是否有一些需要改进的东西呢?您期望的理想的测试人员的工作环境是怎样的?
- leetcode经典例题——单词拆分
- Software Testing Interview Questions: What is Software Testing?The purpose and principle of software testing?
- 图解 Canvas 入门
- Software Testing Interview Questions: What aspects should be considered when designing test cases, i.e. what aspects should different test cases test against?
- The principle of NMS and its code realization
- oracle创建用户以后的权限问题
- 找不到DiscoveryClient类型的Bean
- [Cloud Native--Kubernetes] Pod Controller
- JUC线程池(一): FutureTask使用
猜你喜欢
Countdown to 1 day!From August 2nd to 4th, I will talk with you about open source and employment!
QSunSync Qiniu cloud file synchronization tool, batch upload
国内网站用香港服务器会被封吗?
Will domestic websites use Hong Kong servers be blocked?
阶段性测试完成后,你进行缺陷分析了么?
SV 类的虚方法 多态
Metasploit-域名上线隐藏IP
leetcode: 266. All Palindromic Permutations
Cloud native - Kubernetes 】 【 scheduling constraints
电赛必备技能___定时ADC+DMA+串口通信
随机推荐
Software Testing Interview Questions: What do you think about software process improvement? Is there something that needs improvement in the enterprise you have worked for? What do you expect the idea
[idea] idea configures sql formatting
典型相关分析CCA计算过程
oracle创建表空间
Redis visual management software Redis Desktop Manager2022
图解 Canvas 入门
2022牛客多校训练第二场 J题 Link with Arithmetic Progression
"No title"
Software testing interview questions: Please draw the seven-layer network structure diagram of OSI and the four-layer structure diagram of TCP/IP?
元宇宙:未来我们的每一个日常行为是否都能成为赚钱工具?
Raw and scan of gorm
软件测试面试题:关于自动化测试工具?
Software Testing Interview Questions: What's the Key to a Good Test Plan?
E - Many Operations (按位考虑 + dp思想记录操作后的结果
【Unity编译器扩展之进度条】
2022 Hangzhou Electric Multi-School 1004 Ball
MongoDB搭建及基础操作
tiup status
软件测试面试题:软件验收测试的合格通过准则?
软件测试面试题:黑盒测试、白盒测试以及单元测试、集成测试、系统测试、验收测试的区别与联系?