系统学习Linux-MongoDB

news/2025/2/15 22:02:21/

概述

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

相关概念实例:系统上运行的mongodb的进程,类似于mysql实例;
库:每个数据库都是独立的,有自己的用户,权限,独立存储集合,类似于mysql的库;
 集合:由一组文档构成,类似于mysql的表;
 文档:mongodb数据库的最小数据集,是由多个键值对有序组合的数据单元,类似于mysql的数据记录;
主键:唯一标识一行数据
特性1、面向集合文档存储,适合存储json形式的数据;
2、格式自由,数据格式不固定,数据结构发生变更的同时不会影响程序运行;
3、面向对象的sql查询语句,基本涵盖关系型数据库的所有查询语句;
4、有索引的支持,查询效率更快;
5、支持复制和自动故障转移;
6、可以使用分片集群提升查询性能

应用场景

游戏\物流\社交\物联网\视频直播\大数据


安装Mongodb

rpm安装

移动到yum.repos.d目录下创建mongodb的yum文件

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost 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安装
[root@localhost yum.repos.d]# yum install -y mongodb-org..
..正在安装    : mongodb-org-tools-4.2.24-1.el7.x86_64                            1/5 正在安装    : mongodb-org-mongos-4.2.24-1.el7.x86_64                           2/5 正在安装    : mongodb-org-shell-4.2.24-1.el7.x86_64                            3/5 正在安装    : mongodb-org-server-4.2.24-1.el7.x86_64                           4/5 
Created symlink from /etc/systemd/system/multi-user.target.wants/mongod.service to /usr/lib/systemd/system/mongod.service.正在安装    : mongodb-org-4.2.24-1.el7.x86_64                                  5/5 验证中      : mongodb-org-server-4.2.24-1.el7.x86_64                           1/5 验证中      : mongodb-org-4.2.24-1.el7.x86_64                                  2/5 验证中      : mongodb-org-shell-4.2.24-1.el7.x86_64                            3/5 验证中      : mongodb-org-mongos-4.2.24-1.el7.x86_64                           4/5 验证中      : mongodb-org-tools-4.2.24-1.el7.x86_64                            5/5 已安装:mongodb-org.x86_64 0:4.2.24-1.el7                                                  作为依赖被安装:mongodb-org-mongos.x86_64 0:4.2.24-1.el7  mongodb-org-server.x86_64 0:4.2.24-1.el7 mongodb-org-shell.x86_64 0:4.2.24-1.el7   mongodb-org-tools.x86_64 0:4.2.24-1.el7  完毕!

启动数据库并查看端口号

注:启动数据库服务特殊db没有b

systemctl start mongod.service 

[root@localhost ~]# systemctl start mongod.service 
[root@localhost ~]# netstat -antpu | grep mongod
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      74651/mongod   

目录结构

rpm -ql mongodb-org-server/etc/mongod.confport: 27017监听端口号
bindIp: 127.0.0.1监听地址
/run/mongodbPID文件
/usr/bin/mongod启动命令
/var/lib/mongo存储数据文件
/var/log/mongodb日志
rpm -ql mongodb-org-shell/usr/bin/mongo客户端命令
rpm -ql mongodb-org-tools/usr/bin/mongodump备份数据库
/usr/bin/mongoexport备份文档
/usr/bin/mongoimport恢复文档
/usr/bin/mongorestore恢复数据库

默认数据库

admin:从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。
一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local:这个数据库永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
config:当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

数据库操作

库操作命令整理

查看数据库show databases
show dbs
显示当前所在数据库db
切换数据库use  dbName
数据库创建隐式创建不用主动创建,使用use newDB,会自动创建不存在的数据库
只有在库中创建集合后才会保存,并使用show dbs查看到
删除数据库use dbName
db.dropdatabase()

 输入mongo就会进入数据库模式

[root@localhost ~]# mongo
MongoDB shell version v4.2.24
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("593314ff-d1da-4a78-b01b-128e04aa71d8") }
MongoDB server version: 4.2.24
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, seehttps://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forumshttps://community.mongodb.com
Server has startup warnings: 
2023-08-14T18:50:28.519+0800 I  CONTROL  [initandlisten] 
2023-08-14T18:50:28.519+0800 I  CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2023-08-14T18:50:28.519+0800 I  CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2023-08-14T18:50:28.519+0800 I  CONTROL  [initandlisten] 
2023-08-14T18:50:28.519+0800 I  CONTROL  [initandlisten] 
2023-08-14T18:50:28.519+0800 I  CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2023-08-14T18:50:28.519+0800 I  CONTROL  [initandlisten] **        We suggest setting it to 'never'
2023-08-14T18:50:28.519+0800 I  CONTROL  [initandlisten] 
2023-08-14T18:50:28.519+0800 I  CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2023-08-14T18:50:28.519+0800 I  CONTROL  [initandlisten] **        We suggest setting it to 'never'
2023-08-14T18:50:28.519+0800 I  CONTROL  [initandlisten] 
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---> 

与mysql不同的查看命令dbs

> show databases
admin   0.000GB
config  0.000GB
local   0.000GB
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> 两个命令都可以查看数据库

切换数据库

> use local
switched to db local   一切换到当前数据库> db
local  所在库

创建数据库

> use liweijia
switched to db liweijia

删除数据库

use dbName

db.dropdatabase()


文档操作

mongodb存储数字时默认是float,若要以整型形式存储numberInt()

文档操作命令整理

查看集合show tables
创建集合db.createCollection("test")
删除集合db.需要删除的集合名称.drop()
插入数据(文档)db.集合名称.insert({key:value})                                                             单行
db.集合名称.insertmany([{key:value},{key:value},{key:value}])        多行
mongodb默认数字的数据类型float浮点型,若要改变为整型:NumberInt(数字)
查询数据全集合查询db.集合名称.find({})
db.集合名称.find()
条件查询db.info.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})
更新数据db.info.update({_id:"3"}, {$set:{nickname:"jack"}})
所有满足条件的文档都进行更新db.info.update({userid:"1003"},{$set:{nickname:"tom"}},{multi:true})
更新文档进行数值递增db.info.update({userid:"1003"},{$inc:{likenum:NumberInt(1000)}})
创建集合
> db.createCollection('shiyan')
{ "ok" : 1 }查看集合
> show tables
shiyan删除集合
> db.shiyan.drop()
true
> show tables
>插入数据单行
创建数据库
> use lwj
switched to db lwj
> db.createCollection("test")
{ "ok" : 1 }
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
lwj     0.000GB
test    0.000GB
> db.lwj.insert({'id':'1','name':'lwj1'})
WriteResult({ "nInserted" : 1 })插入数据多行
> db.lwj.insertMany([{'id':'2','name':'lwj2'},{'id':'3','name':'lwj3'},{'id':'4','name':'lwj4'}])
{"acknowledged" : true,"insertedIds" : [ObjectId("64dae9e52e7071ebd2631dcd"),ObjectId("64dae9e52e7071ebd2631dce"),ObjectId("64dae9e52e7071ebd2631dcf")]
}
> 全集合查询
> db.lwj.find()
{ "_id" : ObjectId("64dae4232e7071ebd2631dcc"), "id" : "1", "name" : "lwj1" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dcd"), "id" : "2", "name" : "lwj2" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dce"), "id" : "3", "name" : "lwj3" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dcf"), "id" : "4", "name" : "lwj4" }条件查询
检索id等于3的数据
> db.lwj.find({'id':'3'})
{ "_id" : ObjectId("64dae9e52e7071ebd2631dce"), "id" : "3", "name" : "lwj3" }
> 
条件查询其中{'name':'0'}则是除了name都显示,{'name':'1'}指的是只显示name
> db.lwj.find({'id':'3'},{name:0})
{ "_id" : ObjectId("64dae9e52e7071ebd2631dce"), "id" : "3" }
> db.lwj.find({'id':'3'},{name:1})
{ "_id" : ObjectId("64dae9e52e7071ebd2631dce"), "name" : "lwj3" }数据更新(匹配1,未完成0,已完成1)
> db.lwj.update({'name':'lwj1'},{$set:{'id':'1024'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
查看
> db.lwj.find({'name':'lwj1'})
{ "_id" : ObjectId("64dae4232e7071ebd2631dcc"), "id" : "1024", "name" : "lwj1" }

Mongodb数据库备份

备份命令:mongodump

选项-hhostname:port
-u<username>
-p<password>
--authenticationDatabase<dbname>
-d<database>
-o<path>
语法

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

-d 指定要备份的数据库名称 -h 指定主机名端口号如:localhost:27017 -u -p 用户密码

-o 指定备份文件输出的目录,备份文件以该目录为基准创建

备份命令:mongoexport

选项-hhostname: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

mongodump备份 首先要exit退出数据库模式
> exit
bye
[root@localhost ~]#  mongodump -d lwj -o /opt/lwj-back.json
2023-08-15T13:47:40.395+0800    writing lwj.lwj to /opt/lwj-back.json/lwj/lwj.bson
2023-08-15T13:47:40.396+0800    writing lwj.test to /opt/lwj-back.json/lwj/test.bson
2023-08-15T13:47:40.396+0800    done dumping lwj.lwj (4 documents)
2023-08-15T13:47:40.397+0800    done dumping lwj.test (0 documents)
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
lwj-back.json  rhmongoexport备份test合集 首先要exit退出数据库模式
> exit
bye
[root@localhost opt]# mongoexport -d lwj -c test -o /opt/test-bakc.json
2023-08-15T13:55:58.611+0800    connected to: mongodb://localhost/
2023-08-15T13:55:58.614+0800    exported 0 records
[root@localhost opt]# ls
lwj-back.json  rh  test-bakc.json
[root@localhost opt]# 

恢复命令:mongorestore

选项-hhostname:port
-u<username>
-p<password>
--authenticationDatabase<dbname>
-d<database>
--drop当目标数据库中存在同名集合则删除在恢复
语法mongorestore -h hostName -u username -p password -d dbName -c tableName bakcupDirector/bsonFile

恢复命令:mongoimport

选项-hhostname: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
先删除lwj数据库
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
lwj     0.000GB
test    0.000GB
> show tables
lwj
shiyan
> use lwj
switched to db lwj
> db.dropDatabase()
{ "dropped" : "lwj", "ok" : 1 }
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
> 恢复数据库
[root@localhost ~]# ls /opt/lwj-back.json/*
lwj.bson  lwj.metadata.json  test.bson  test.metadata.json
[root@localhost ~]# mongorestore -d lwj -c lwj /opt/lwj-back.json/lwj/lwj.bson 
2023-08-15T14:22:08.515+0800    checking for collection data in /opt/lwj-back.json/lwj/lwj.bson
2023-08-15T14:22:08.516+0800    reading metadata for lwj.lwj from /opt/lwj-back.json/lwj/lwj.metadata.json
2023-08-15T14:22:08.520+0800    restoring lwj.lwj from /opt/lwj-back.json/lwj/lwj.bson
2023-08-15T14:22:08.581+0800    no indexes to restore
2023-08-15T14:22:08.581+0800    finished restoring lwj.lwj (4 documents, 0 failures)
2023-08-15T14:22:08.581+0800    4 document(s) restored successfully. 0 document(s) failed to restore.登陆mongo进行验证
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
lwj     0.000GB
test    0.000GB
> use lwj
switched to db lwj
> show tables
lwj
> db.lwj.find()
{ "_id" : ObjectId("64dae9e52e7071ebd2631dcd"), "id" : "2", "name" : "lwj2" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dce"), "id" : "3", "name" : "lwj3" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dcf"), "id" : "4", "name" : "lwj4" }
{ "_id" : ObjectId("64dae4232e7071ebd2631dcc"), "id" : "1024", "name" : "lwj1" }
> 
删除集合
> db.lwj.drop()
trup
> use lwj
switched to db hy
> show tables
> 
恢复lwj集合
[root@localhost hy]# mongoimport -d hy -c lwj /opt/lwj-back.json
2023-08-15T10:02:27.858+0800	connected to: mongodb://localhost/
2023-08-15T10:02:27.861+0800	6 document(s) imported successfully. 0 document(s) failed to import.
##查看
> show tables
lwj
> db.test.find()
{ "_id" : ObjectId("64dae9e52e7071ebd2631dcd"), "id" : "2", "name" : "lwj2" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dce"), "id" : "3", "name" : "lwj3" }
{ "_id" : ObjectId("64dae9e52e7071ebd2631dcf"), "id" : "4", "name" : "lwj4" }
{ "_id" : ObjectId("64dae4232e7071ebd2631dcc"), "id" : "1024", "name" : "lwj1" }
> 

除此之外表还可以导入到其它的库,创建一个新库yes,把集合test导入 

##创建库
> show dbs
admin   0.000GB
config  0.000GB
hy      0.000GB
local   0.000GB
> use yes
switched to db yes
> db.createCollection('hy')
{ "ok" : 1 }
> show dbs
admin   0.000GB
config  0.000GB
hy      0.000GB
local   0.000GB
yes     0.000GB
> show tables
hy
> 
##把集合test导入yes
[root@localhost hy]# mongoimport -d yes -c test /opt/test-back.json
2023-08-15T10:06:57.990+0800	connected to: mongodb://localhost/
2023-08-15T10:06:57.993+0800	6 document(s) imported successfully. 0 document(s) failed to import.
##验证
> show tables
hy
test
> db.test.find()
{ "_id" : ObjectId("64da3428cbf20d8dc76b3349"), "id" : "2", "name" : "hy2", "age" : "666" }
{ "_id" : ObjectId("64da3428cbf20d8dc76b334a"), "id" : "3", "name" : "hy3", "age" : "20" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334b"), "id" : "2", "name" : "hy4", "age" : "666" }
{ "_id" : ObjectId("64da3e5ccbf20d8dc76b334c"), "id" : "2", "name" : "hy5", "age" : "666" }
{ "_id" : ObjectId("64da414bcbf20d8dc76b334d"), "id" : "7", "name" : "hy7", "age" : 120 }
{ "_id" : ObjectId("64da337fcbf20d8dc76b3348"), "id" : "99", "name" : "hy1", "age" : "88" }


http://www.ppmy.cn/news/1036145.html

相关文章

windows11下配置vscode中c/c++环境

本文默认已经下载且安装好vscode&#xff0c;主要是解决环境变量配置以及编译task、launch文件的问题。 自己尝试过许多博客&#xff0c;最后还是通过这种方法配置成功了。 Linux(ubuntu 20.04)配置vscode可以直接跳转到配置task、launch文件&#xff0c;不需要下载mingw与配…

HTTP协议详细介绍

HTTP协议详细介绍 1. 一.概述 HTTP(HyperText Transfer Protocol)&#xff1a;超文本传输协议&#xff0c;是一种允许通讯双方的一端获取资源 (如 HTML 文档)的协议。它是互联网上任何数据交换的基础&#xff0c;属于 C/S(客户端/服务器)协议&#xff0c; 这意味着请求是由接收…

JavaScript实现在线Excel的附件上传与下载

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 在本地使用Excel时&#xff0c;经常会有需要在Excel中添加一些附件文件的需求&am…

计蒜客T1126——单词倒排

超级水的一道题&#xff0c;和T1122类似但更简单&#xff0c;分割后逆序输出即可~ 题干&#xff1a; #include <iostream> #include <string> #include <vector> using namespace std;int main(int argc, char** argv) {string S;vector<string> V;get…

Linux文件权限一共10位长度,分成四段

Linux文件权限一共10位长度,分成四段 Linux文件权限 1、 文件aaa的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限&#xff0c;下列哪些命令是正确的&#xff1f; a) chmod ax gw aaa √ b) chmod 764 aaa c) chmod 775 aaa √ d)…

windows Socket简单编程实例

服务端 #include <winsock2.h> #include <string.h> #include <stdio.h> #include <stdlib.h>#pragma comment(lib, "Ws2_32.lib")void error_handing(const char* message) {fputs(message, stderr);fputc(\n, stderr);exit(1); } int mai…

css鼠标样式 cursor: pointer

cursor: none; cursor:not-allowed; 禁止选择 user-select: none; pointer-events:none;禁止触发事件, 该样式会阻止默认事件的发生&#xff0c;但鼠标样式会变成箭头

拒绝摆烂!C语言练习打卡第二天

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;每日一练 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、选择题 &#x1f4dd;1.第一题 &#x1f4dd;2.第二题 &#x1f4dd;…