当前位置:网站首页>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)即可
#但是关闭这个进程不代表退出数据库,相当于将当前进程初始化释放,关了之后又开启了,相当于一个优化操作

边栏推荐
- [230]连接Redis后执行命令错误 MISCONF Redis is configured to save RDB snapshots
- ansible学习笔记分享-含剧本示例
- 2022 Multi-school Second Session K Question Link with Bracket Sequence I
- 2022牛客多校第三场 A Ancestor
- 2022 Hangzhou Electric Multi-School 1004 Ball
- Cloud native - Kubernetes 】 【 scheduling constraints
- 网站最终产品页使用单一入口还是多入口?
- 2022牛客多校第三场 J题 Journey
- Zombie and orphan processes
- 2022杭电多校 第三场 B题 Boss Rush
猜你喜欢

could not build server_names_hash, you should increase server_names_hash_bucket_size: 32

MAUI Blazor 权限经验分享 (定位,使用相机)

【idea】idea配置sql格式化

MongoDB搭建及基础操作

leetcode:266. 回文全排列
![[230] Execute command error after connecting to Redis MISCONF Redis is configured to save RDB snapshots](/img/fa/5bdc81b1ebfc22d31f42da34427f3e.png)
[230] Execute command error after connecting to Redis MISCONF Redis is configured to save RDB snapshots

国内网站用香港服务器会被封吗?

SV class virtual method of polymorphism

《WEB安全渗透测试》(28)Burp Collaborator-dnslog外带技术

oracle创建用户
随机推荐
MongoDB搭建及基础操作
Huggingface入门篇 II (QA)
D - I Hate Non-integer Number (选数的计数dp
Software testing interview questions: What are the three modules of LoadRunner?
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
数据类型及输入输出初探(C语言)
MAUI Blazor 权限经验分享 (定位,使用相机)
canvas Gaussian blur effect
软件测试面试题:关于自动化测试工具?
typeScript - Partially apply a function
软件开发工具的技术要素
找不到DiscoveryClient类型的Bean
matlab中rcosdesign函数升余弦滚降成型滤波器
翁恺C语言程序设计网课笔记合集
关于我仔细检查审核过关于工作人员页面,返回一个所属行业问题
2022 Nioke Multi-School Training Session H Question H Take the Elevator
tiup update
在线中文姓名生成工具推荐
软件测试面试题:一套完整的测试应该由哪些阶段组成?
2022 Multi-school Second Session K Question Link with Bracket Sequence I