mongodb数据库基础命令

本文详细介绍了MongoDB的安装,包括配置yum源和yum安装过程。还涵盖了如何登录MongoDB数据库,进行多实例配置,以及数据库的基本操作如导入、导出、条件查询和备份恢复。同时,文章提供了多实例配置的步骤,包括配置文件设定、服务启动及数据库交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置yum源,yum安装mongodb

vim /etc/yum.repos.d/local.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 -y install mongodb-org
vim /etc/mongod.conf
bindIp: 0.0.0.0	#监听所有地址,让任何人都可以来访问

systemctl start mongod
systemctl status mongod

登陆mongodb数据库

[root@localhost ~]# mongo		
MongoDB shell version v3.6.21
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c0922c65-13d8-4be0-a7cb-b21064b44d11") }
MongoDB server version: 3.6.21
...
> show dbs			#查看数据库,相当于mysql的show databases;
admin   0.000GB
config  0.000GB
local   0.000GB

多实例安装配置

[root@localhost ~]# cd /etc
[root@localhost etc]# cp -p mongod.conf mongod2.conf
[root@localhost etc]# vim mongod2.conf 		#修改配置文件
 10   path: /data/mongodb/mongod2.log			#定义日志存放路径
 14   dbPath: /data/mongodb/mongo				#定义数据存放位置
 29   port: 27018												#监听端口号
[root@localhost etc]# mkdir -p /data/mongodb		#创建数据目录
[root@promote ~]# cd /data/mongodb/					
[root@promote mongodb]# mkdir mongo				#创建日志目录
[root@promote mongodb]# touch mongod2.log		#创建日志文件
[root@promote mongodb]# chmod 777 mongod2.log		#授权,让程序能够写入日志
[root@promote mongodb]# mongod -f /etc/mongod2.conf 	#指定配置文件启动服务
about to fork child process, waiting until server is ready for connections.
forked process: 21518
child process started successfully, parent exiting
[root@promote mongodb]# mongo --port 27018				#登录进入数据库
MongoDB shell version v3.6.21
connecting to: mongodb://127.0.0.1:27018/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("d514e61c-59e3-477e-ac08-be64eb268992") }
MongoDB server version: 3.6.21
...
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

基本操作

> db.version()		#查看版本号
3.6.21
> use school		#直接进数据库,附带创建数据库
switched to db school
> show dbs		#此时查看数据库,并没有school
admin   0.000GB
config  0.000GB
local   0.000GB
> db.createCollection('info')	#在库school中创建集合,相当于mysql的表
{ "ok" : 1 }
> show dbs		#此时发现可以看到school库了。只有当新库中有数据时,才会显示改库
admin   0.000GB
config  0.000GB
local   0.000GB
school  0.000GB
> show collections		#查看集合
info
> db.info.find()		#查看集合内数据,相当于select * from info,()内可以写查找条件
> db.info.insert({"id":1,"name":"zhangsan","score":88,"hobby":["game","talk","sport"]})
WriteResult({ "nInserted" : 1 })
#插入数据,()内接{}{}内加键值对,字符类型用""括起来,多个键值对用','分开。键值对中的值有多个时,用数组[]表示,值与值间用','隔开。值与值可以是不同字符类型
> db.info.find()		#再次查看集合内数据
{ "_id" : ObjectId("5fb8ca13d6fe33bb8d9a361c"), "id" : 1, "name" : "zhangsan", "score" : 88, "hobby" : [ "game", "talk", "sport" ] }
> a=db.info.find()		#将命令db.info.find()定义别名为a
{ "_id" : ObjectId("5fb8ca13d6fe33bb8d9a361c"), "id" : 1, "name" : "zhangsan", "score" : 88, "hobby" : [ "game", "talk", "sport" ] }
> for(var i=2;i<=100;i++)db.info.insert({"id":i,"name":"jack"+i})	#循环插入数据,用"+"可以将前后字段连接起来成一个字符串
WriteResult({ "nInserted" : 1 })
> db.info.find()		#查看数据
{ "_id" : ObjectId("5fb8ca13d6fe33bb8d9a361c"), "id" : 1, "name" : "zhangsan", "score" : 88, "hobby" : [ "game", "talk", "sport" ] }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a361d"), "id" : 2, "name" : "jack2" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a361e"), "id" : 3, "name" : "jack3" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a361f"), "id" : 4, "name" : "jack4" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3620"), "id" : 5, "name" : "jack5" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3621"), "id" : 6, "name" : "jack6" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3622"), "id" : 7, "name" : "jack7" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3623"), "id" : 8, "name" : "jack8" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3624"), "id" : 9, "name" : "jack9" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3625"), "id" : 10, "name" : "jack10" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3626"), "id" : 11, "name" : "jack11" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3627"), "id" : 12, "name" : "jack12" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3628"), "id" : 13, "name" : "jack13" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3629"), "id" : 14, "name" : "jack14" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a362a"), "id" : 15, "name" : "jack15" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a362b"), "id" : 16, "name" : "jack16" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a362c"), "id" : 17, "name" : "jack17" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a362d"), "id" : 18, "name" : "jack18" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a362e"), "id" : 19, "name" : "jack19" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a362f"), "id" : 20, "name" : "jack20" }
Type "it" for more			#一次显示20条,想看更多,输入it
> db.info.findOne({"id":10})		#查看字段为 "id":10 的信息,用{}括起来
{
	"_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3625"),
	"id" : 10,
	"name" : "jack10"
}
> a=db.info.findOne({"id":10})		#定义别名
{
	"_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3625"),
	"id" : 10,
	"name" : "jack10"
}
> typeof(a.id)	#查看id的字符类型
number
> typeof(a.name)
string	
> typeof(a.score)
undefined		#应该显示是number类型的,不知道是不是版本原因,显示未知的类型
> typeof(a.hobby)
undefined		#应该显示是object类型的,不知道是不是版本原因,显示未知的类型
> db.info.update({"id":10},{$set:{"name":"tom"}})			#修改,将id为10的记录中name改为tom
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.info.findOne({"name":"tom"})
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3625"), "id" : 10, "name" : "tom" }
> db.info.update({"id":11},{$set:{"name":"tom"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.info.find()
...
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3624"), "id" : 9, "name" : "jack9" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3625"), "id" : 10, "name" : "tom" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3626"), "id" : 11, "name" : "tom" }
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3627"), "id" : 12, "name" : "jack12" }
...
> db.info.findOne({"name":"tom"})		#当有多条记录符合条件时,只显示第一条 ???
{ "_id" : ObjectId("5fb8cbdbd6fe33bb8d9a3625"), "id" : 10, "name" : "tom" }
> db.createCollection('test')				#创建集合
{ "ok" : 1 }
> show tables
info
test
> db.test.drop()				#删除集合(表),当此库仅剩一个集合时,无法删除
true
> show tables
info
> use myschool
switched to db myschool
> db.createCollection('a')
{ "ok" : 1 }
> use myschool
switched to db myschool
> db.dropDatabase()			#删除数据库
{ "dropped" : "myschool", "ok" : 1 }


> use school
switched to db school
> db.info.count()				#统计
100

kgcrs:PRIMARY> db.users2.find().limit(10)	#查看前10行数据

数据库导入导出

导出数据库

[root@promote mongodb]# mongoexport -d school -c info -o /opt/school.json	#导出数据库,-d知道数据库,-c指定集合,-o指定保存路径
2020-11-21T17:09:03.805+0800	connected to: localhost
2020-11-21T17:09:03.806+0800	exported 100 records
[root@promote mongodb]# vim /opt/school.json 

{"_id":{"$oid":"5fb8d709d6fe33bb8d9a3680"},"id":1.0,"name":"zhangsan","score":88.0,"hobby":["game","talk","sport"]}
{"_id":{"$oid":"5fb8d723d6fe33bb8d9a3681"},"id":2.0,"name":"jack2"}
{"_id":{"$oid":"5fb8d723d6fe33bb8d9a3682"},"id":3.0,"name":"jack3"}
...

数据库导入

[root@promote mongodb]# mongoimport -d school -c test1 --file /opt/school.json 
2020-11-21T17:15:48.146+0800	connected to: localhost
2020-11-21T17:15:48.151+0800	imported 100 documents

条件操作

[root@promote mongodb]# mongoexport -d school -c info -q '{"id":{"$eq":10}}' -o /opt/top10.json	#将id为10的记录导出到/opt/top10.json

备份与恢复

[root@promote mongodb]# mkdir /backup		#备份
[root@promote mongodb]# mongodump -d school -o /backup/
[root@promote mongodb]# ls /backup/school/
info.bson  info.metadata.json  test1.bson  test1.metadata.json  test.bson  test.metadata.json

[root@promote mongodb]# mongorestore -d school1 --dir=/backup/school/	#还原

> db.copyDatabase("school","share")			#将数据库shcool复制一份成数据库share
{ "ok" : 1 }

多实例配置

配置yum源,yum安装

vim /etc/yum.repos.d/local.repo	#配置yum源,添加
[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 -y install mongodb-org

配置配置文件

cd /etc
cp mongod.conf mongod2.conf
cp mongod.conf mongod3.conf
cp mongod.conf mongod4.conf
vim mongod.conf
 10   path: /opt/mongodb/logs/mongod.log
 14   dbPath: /opt/mongodb/date/mongodb
 29   port: 27017
 30   bindIp: 0.0.0.0
vim mongod2.conf
 10   path: /opt/mongodb/logs/mongod2.log
 14   dbPath: /opt/mongodb/date/mongodb2
 29   port: 27018
 30   bindIp: 0.0.0.0
vim mongod3.conf
 10   path: /opt/mongodb/logs/mongod3.log
 14   dbPath: /opt/mongodb/date/mongodb3
 29   port: 27019
 30   bindIp: 0.0.0.0
vim mongod4.conf
 10   path: /opt/mongodb/logs/mongod4.log
 14   dbPath: /opt/mongodb/date/mongodb4
 29   port: 27020
 30   bindIp: 0.0.0.0
cd /var/log/mongodb/
touch mongod2.log
touch mongod3.log
touch mongod4.log
chown mongod.mongod *
cd /var/lib/
mkdir mongo2 mongo3 mongo4

启动服务

systemctl start mongod
mongod -f /etc/mongod2.conf
mongod -f /etc/mongod3.conf
mongod -f /etc/mongod4.conf

netstat -anutp | grep mongod
tcp        0      0 0.0.0.0:27019           0.0.0.0:*               LISTEN      12190/mongod        
tcp        0      0 0.0.0.0:27020           0.0.0.0:*               LISTEN      12217/mongod        
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      12117/mongod        
tcp        0      0 0.0.0.0:27018           0.0.0.0:*               LISTEN      12162/mongod   

数据库操作

mongo
> 
use school
db.createCollection('info')
db.info.insert({"id":1,"name":"zhangsan","score":88,"hobby":["game","talk","sport"]})
for(var i=2;i<=100;i++)db.info.insert({"id":i,"name":"jack"+i})

db.copyDatabase("school","share")		#复制数据库,school有的share没有的就复制,share有的保留不变

use test
for(var i=1;i<=100;i++)db.user.insert({"id":i,"name":"jack"+i})
db.copyDatabase("test","share")		

克隆集合
> db.runCommand({"cloneCollection":"share.user","from":"192.168.100.22:27017"})	#将192.168.100.22:27017的share.user集合克隆过来

创建用户
> use admin		#在自带的admin数据库操作
switched to db admin
> db.createUser({"user":"root","pwd":"123","roles":["root"]})
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
> db.auth("root","123")

进程管理
db.currentOp()
...
"opid" : 5475,
...

db.killOp(5475)				#当前进程结束掉后马上会自动启动,相当于快速重启
{ "info" : "attempting to kill op", "ok" : 1 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值