MongoDB基本操作、備份還原及用戶管理

今日趁週末得空,將近日在學習的MongoDB數據庫常用命令作以下整理,方便工作中查看

MongoDB的邏輯結構主要由文檔、集合和數據庫三部分組成。其中文檔是MongoDB的核心概念,它是MongoDB邏輯存儲的最小單元,相當於關係型數據庫中的一行記錄,多個文檔組成集合,集合相當於關係型數據庫中的表,多個集合組成數據庫。

SQL術語 說明 MongoDB術語 說明
database 數據庫 database 數據庫
table 數據庫表 collection 集合
row 記錄 document 行域
column 字段 field
index index 索引
table joins 表連接 不支持
primary key 主鍵 primary key 自動將_id字段設置爲主鍵

一個MongoDB中可以創建多個數據庫,默認的數據庫爲test。

默認數據庫:

  • admin:從權限的角度來看,這是root數據庫。將一個用戶添加到這個數據庫中,該用戶將自動繼承所有數據庫的權限;
  • local:這個數據永遠不會被複制,可用來存儲限於本地單臺服務器的任意集合;
  • config:當Mongo用於分片設置時,config數據庫在內部使用,用於保存分片的相關信息。

MongoDB 登錄、退出

#本地登錄(默認實例端口號爲:--port=27017,可以不寫)
> mongo

#登錄遠程主機的實例
> mongo --host 192.168.1.2 --port =27017

#退出MongoDB
> exit

數據庫

#創建數據庫(如果數據庫不存在,則創建數據庫,否則切換到指定數據庫)
> use school

#查看所有數據庫
> show dbs

#刪除school數據庫
> use school
> db.dropDatabase()

#顯示數據庫操作命令
> db.help()

集合

集合就是MongoDB文檔組,類似於關係數據庫管理系統中的把表格,集合存於數據庫中,集合沒有固定的結構,這樣子集合中可以存放不同格式和類型的表格。

#創建info集合
> db.createcollection('info')

#查看集合
方法一:
> show tabels

方法二:
> show colletctions

#顯示info集合操作命令
> db.info.help()

文檔(增、刪、改、查)

文檔是一個鍵值對(BSON),不需要設置相同的字段,並且相同的字段不需要相同的數據類型。

1. 插入文檔

#插入一條記錄
> db.info.insert({"id":1,"score":88,"address":"金川校區","hobby":["game","talk","sport"]})

#向指定集合中插入一條文檔數據
> db.collection.insertOne()

#向指定集合中插入多條文檔數據
> db.collection.insertMany()

#通過循環批量插入數據
> for(var i=1;i<100;i++)db.info.insert({"id":i,"name":"jack"+i})

2. 刪除文檔

#刪除info集合中id=1的文檔
> db.info.remove({"id":"1"})

3. 修改文檔

#修改info集合id=1的name值爲"zhangsan"文檔
db.info.update({"id":"1"},{$set:{"name":"zhangsan"}})

4. 查詢文檔

#查詢info集合所有文檔
> db.info.find()

#查詢info集合id爲1的文檔
> db.info.findOne({id:1})

#統計記錄數
> db.info.count()

備份與恢復數據庫

  1. 通過mongoexport和mongoimport目錄來導出導入數據;
  2. 導出數據文件的格式爲:JSON格式或CSV格式;

參數說明:

  • -d:數據庫的名稱
  • -c:collection的名稱
  • -f:要導出哪些列
  • -o:要導出的文件名
  • -q:到導出數據的過濾條件
#備份本地school數據庫
> [root@localhost ~]# mkdir /backup
[root@localhost ~]# mongodump -d school -o /backup/
2018-07-14T03:36:44.427-0400    writing school.info to
2018-07-14T03:36:44.429-0400    done dumping school.info (99 documents)

#恢復本地school數據庫至數據庫abc中
> [root@localhost ~]# mongorestore -d abc --dir=/backup/school
2018-07-14T03:37:40.174-0400    the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2018-07-14T03:37:40.174-0400    building a list of collections to restore from /backup/school dir
2018-07-14T03:37:40.175-0400    reading metadata for abc.info from /backup/school/info.metadata.json
2018-07-14T03:37:40.187-0400    restoring abc.info from /backup/school/info.bson
2018-07-14T03:37:40.208-0400    no indexes to restore
2018-07-14T03:37:40.208-0400    finished restoring abc.info (99 documents)
2018-07-14T03:37:40.209-0400    done

#導出本機school數據庫info集合
> [root@localhost ~]# mongoexport -d school -c info -o /backup/info.json
2018-07-14T03:44:41.610-0400    connected to: localhost
2018-07-14T03:44:41.613-0400    exported 99 records

#導入備份數據至本機school數據庫user集合
> [root@localhost ~]# mongoimport -d school -c user --file /backup/info.json
2018-07-14T03:45:09.300-0400    connected to: localhost
2018-07-14T03:45:09.330-0400    imported 99 documents

#導出本機school數據庫user1集合id=10的數據
> [root@localhost ~]# mongoexport -d school -c user -q '{"id":{"$lt":10}}' -o /backup/top10.json
2018-07-14T03:51:23.968-0400    connected to: localhost
2018-07-14T03:51:23.969-0400    exported 9 records

複製數據庫

> show dbs
> db.copyDatabase("school","school_1")

![image](https://note.youdao.com/favicon.ico)

克隆集合

#啓用如下2個實例
> [root@localhost ~]# netstat  -tunlp | grep mongod
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      61249/mongod
tcp        0      0 0.0.0.0:27018           0.0.0.0:*               LISTEN      61212/mongod

#登錄端口號爲27018的實例
> mongo --port 27018

#查詢數據庫
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

#克隆端口號爲27017實例的school數據庫的info表至本實例數據庫中
> db.runCommand({"cloneCollection":"school.info","from":"192.168.100.100:27017"})

![image](https://note.youdao.com/favicon.ico)

用戶授權(認證登錄)

#登錄mongodb
mongo

#在admin數據庫創建新用戶root:123123
> use admin
> db.createUser({"user":"root","pwd":"123123","roles":["root"]})
Successfully added user: { "user" : "root", "roles" : [ "root" ] }

#退出
> exit

#關閉mongodb服務
mongod -f /data/conf/mongodb1.conf --shutdown

#帶認證參數方式啓動mongodb服務
mongod -f /data/conf/mongodb1.conf --auth

#登錄mongodb數據庫
mongo

#查詢數據庫
show dbs
> 不顯示內容,這裏要先授權認證後才能執行操作

> use admin

#使用授權root用戶驗證
> db.auth("root":"123123")

#再次查詢,已經可以查詢數據了
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
school  0.000GB

#退出
> exit

進程管理

1. 查看當前正在運行的進程的命令:db.currentOp() ------> 獲取opid進程號
2. 終止正在運行的高消耗資源的進程命令:db.killOP(opid)

更詳細的內容,請多參考 MongoDB在線幫助文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章