1. 程式人生 > >MongoDB基礎入門

MongoDB基礎入門

reat nosql pan 傳統 grep storage dmi lse 自動

MongoDB算是NoSQL為代表的老技術了(沒有任何歧視的意思),好久沒有研究了,重新溫習一遍

1,安裝

下載解壓安裝包

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.5.tgz
tar -xvzf mongodb-linux-x86_64-3.6.5.tgz
mv mongodb-linux-x86_64-3.6.5 mongodb

環境變量配置

vi /etc/pfofile
#最後加入mongo的bin目錄
export PATH=$PATH:/usr/local/mongodb/bin
#刷新環境變量
source /etc/profile

#創建mongodb的數據庫目錄
cd mongodb/
mkdir db

配置文件(etc/mongodb.cnf)

port=27017 #端口 
dbpath= /usr/local/mongodb/db #數據庫存文件存放目錄 
logpath= /usr/local/mongodb/mongodb.log #日誌文件存放路徑 
logappend=true #使用追加的方式寫日誌 
fork=false #不以守護程序的方式啟用,即不在後臺運行 
maxConns=100 #最大同時連接數 
noauth=true #不啟用驗證 
#auth=true #啟用驗證,設置完管理員權限後啟用身份認證模式 
journal=true #每次寫入會記錄一條操作日誌(通過journal可以重新構造出寫入的數據)。
#即使宕機,啟動時wiredtiger會先將數據恢復到最近一次的checkpoint點,然後重放後續的journal日誌來恢復。
storageEngine=wiredTiger #存儲引擎有mmapv1、wiretiger、mongorocks
#bind_ip = 0.0.0.0 #這樣就可外部訪問了,例如從win10中去連虛擬機中的MongoDB
#啟動mongodb服務
mongod --config /etc/mongodb.cnf& #服務已啟動 [root@tencent01 bin]# ps -ef|grep mongodb root 21246 20823 25 11:27 pts/0 00:00:01 ./mongod --config /etc/mongodb.cnf root 21268 20823 0 11:27 pts/0 00:00:00 grep --color=auto mongodb

不啟用驗證方式,直接mongo命令就可以登錄數據

技術分享圖片

2,初始化權限

添加管理員賬戶

技術分享圖片

重啟mongodb服務,mongo命令仍能訪問數據庫但是不能進行任何操作

技術分享圖片

使用身份認證方式登錄之後,就可以操作了 :mongo --port 27017 -u "root" -p "root123" -authenticationDatabase "admin"

技術分享圖片

3,增刪查改

建庫,use db_name之後,創建任何一個集合之後,數據庫即可自動創建。

技術分享圖片

集合的增刪查改

技術分享圖片

db.my_collection.drop();
show collections;
db.my_collection.insert({"user_id":"u001","name":"jack"});
db.my_collection.insert({"user_id":"u002","name":"jim","remark":"developer"});
db.my_collection.find({user_id:"u002"})
db.m_collection.update({user_id:"u002"},{$set:{remark:"senior developer"}})
db.my_collection.deleteMany({user_id:"u002"})

4,備份還原

mongodump -h 127.0.0.1:27017 -uroot -proot123 --authenticationDatabase admin -o /data/backup/
mongodump -h 127.0.0.1:27017 -uroot -proot123 --authenticationDatabase admin -d my_mongodb -o /data/backup/
mongorestore -h 127.0.0.1:27017 -uroot -proot123 --authenticationDatabase admin -d my_mongodb --drop /data/backup/

備份

技術分享圖片

還原

技術分享圖片

5,典型實際應用場景(自己YY出來的)

以博客園的文章為例,一篇文章無非就是“作者”,“標題”,“內容”,“發布時間”,“支持數”,“反對數”,“創建時間”,“評論”,等等元素
對於評論,包含了評論的“作者”,“內容”,“支持數”,“反對數”,“評論時間”等等,又是一個子文檔,歸結於文章的一部分,
如果用傳統的關系數據庫,看復雜程度,要表示這些信息,少說也要十張八張表,而且任何一個操作都不會太簡單。
如果用mongodb,一篇文章,所有的信息都可以用一條集合來表示,通過操作這條集合的不同元素來實現,極大地減少了對數據操作的簡化程度。

如下,是文章本身的信息

db.article.insert({"id":"1",
"作者":"一個牛逼的人",
"title":"博客園文章",
"content":"很長的一篇文章",
"支持":"0",
"反對":"0",
"create_date":"2018-6-14"
});

技術分享圖片

添加評論信息(某個文檔下面添加子文檔)

db.article.update({"id":"1"},
{
    $push: 
    { comments: 
        { 
            "id" : "·",
            "user_name" : "jack",
            "content" : "1樓的評論……",
            "支持":"0",
            "反對":"0",
            "create_date" : "20180614"
        } 
    }
})

db.article.update({"id":"1"},
{
    $push: 
    { comments: 
        { 
            "id" : "2",
            "user_name" : "mike",
            "content" : "2樓的評論……",
            "支持":"0",
            "反對":"0",
            "create_date" : "20180614"
        } 
    }
})

技術分享圖片

整體來看,從安裝到使用,還是非常簡單的,開源技術想都不用想,難點在於運維,高可用,以及各種未知的坑的處理。

參考:
https://blog.csdn.net/u013451157/article/details/78765784
https://www.cnblogs.com/clsn/p/8244206.html
https://blog.csdn.net/junshangshui/article/details/79371316

MongoDB基礎入門