NoSQL數(shù)據(jù)庫——MongoDB

MongoDB簡介和啟動

NoSQL數(shù)據(jù)庫

NoSQL數(shù)據(jù)庫:Not only sql,指代非關(guān)系型數(shù)據(jù)庫

優(yōu)點:高可擴展性、分布式計算、低成本、靈活架構(gòu)、半結(jié)構(gòu)化數(shù)據(jù)、簡化關(guān)聯(lián)關(guān)系

缺點:沒有標準化、有限查詢、不直觀

windows下啟動MongoDB
安裝路徑的bin目錄下啟動命令行
# 命令行輸入mongod --dbpath (mongo中data文件下的db文件路徑)
D:\mongoDB\mongodb-win32-x86_64-2008plus-ssl-3.2.16-10-g281b824\bin>mongod --dbp
ath D:\mongoDB\mongodb-win32-x86_64-2008plus-ssl-3.2.16-10-g281b824\data\db
啟動成功后不要關(guān)閉這個窗口,打開另一個窗口輸入mongo命令

MongoDB將數(shù)據(jù)儲存為一個文檔,數(shù)據(jù)由key=value的鍵值對方式儲存,
數(shù)據(jù)庫[db]-->集合[collection]-->文檔-->域

MongoDB常用語法

show dbs                       #查看所有數(shù)據(jù)庫

use users                      #進入users數(shù)據(jù)庫,如果users不存在也會進入但是不會創(chuàng)建,
                               #但是在這個數(shù)據(jù)庫進行數(shù)據(jù)的操作后,users將被自動創(chuàng)建

db.dropDatabase()              #刪除進入的這個數(shù)據(jù)庫

show collections               #展示所有集合

db.createCollections("users")  #創(chuàng)建一個名為users的集合

db.users.drop()                #刪除users集合
MongoDB數(shù)據(jù)的增刪改
db.users.insert({id:1,name:"tom"})  # 插入數(shù)據(jù),集合如果沒有創(chuàng)建會自動創(chuàng)建

db.users.find()                     
# 查找所有數(shù)據(jù),這是我們可以看到每一個域前都有一個文檔id:_id,可以自定義_id的值

db.users.update({name:”tom”}, {name:”jerry”}) 
#更新滿足name="tom"的文檔,整個文檔除了_id不會改變都會變化

db.users.update({name:”tom”}, {$set:{name:”jerry”}})
#更新滿足條件的文檔中域名為"name"的值,只會改變name

db.users.update({條件}, {$set:{name:”people”}}, {multi:true})
#更新符合條件的多行文檔中對應(yīng)的域

db.users.remove({name:"tom"}) #刪除name域名值為tom的文檔

db.users.remove({name:"people"}{justOne:false}) #刪除所有name域名值為people的文檔
MongoDB的查詢操作

MongoDB的查詢主要就是兩個方法
db.<集合名字>.find([{條件1},{條件2},...]).pretty()—————查詢?nèi)?br> db.<集合名字>.findOne([{條件1},{條件2},...]).limit(5)———查詢滿足條件的第一個

??????.pretty()是將查詢到的數(shù)據(jù)格式化
??????.limit(num)是限制查詢的條數(shù)
??????.skip(行數(shù))是跳行查詢
??????.sort([{域名1:1/-1},{域名2:1/-1}])是升/降序排序,可以指定多個,

所以主要是掌握MongoDB自帶的條件算符和方法

# 查詢年齡小于/小于等于/大于/大于等于的所有文檔
db.users.find({age:{$lt/$lte/$gt/$gte:20}})

# 查詢年齡小于15,或者年齡大于20的所有文檔,與條件直接寫在條件列表中,或條件需要
# {$or:[{條件1},{條件2}]}
db.users.find({$or:[{age:{$lt:15}},{age:{$gt:20}}]})

# 查詢年齡在/不在10~15之間的所有文檔
db.users.find({age:{$in/$nin:[10,15]}})

# 查詢名字中以t開頭,以m結(jié)尾的所有文檔(正則查詢)
db.users.find({name:/^t\w.*m$/})    or   db.users.find({name:{$regex:"^t\w.*m$"}})
MongoDB的去重

MongoDB自帶了去重操作,可以指定域

db.users.distinct("age",{條件})              #將users集合中的age域去重

MongoDB的主從雙備(我也只是了解點QwQ)

什么是復(fù)制

復(fù)制提供了數(shù)據(jù)的冗余備份,并在多個服務(wù)器上存儲數(shù)據(jù)副本,提高了數(shù)據(jù)的可用性,并可以保證數(shù)據(jù)的安全性。復(fù)制還允許從硬件故障和服務(wù)中斷中恢復(fù)數(shù)據(jù)

為什么要復(fù)制

?????◆數(shù)據(jù)備份
?????◆數(shù)據(jù)災(zāi)難恢復(fù)
?????◆讀寫分離
?????◆高(24* 7)數(shù)據(jù)可用性
?????◆無宕機維護
?????◆副本集對應(yīng)用程序是透明

復(fù)制的工作原理

?????◆復(fù)制至少需要兩個節(jié)點A、B...
?????◆A是主節(jié)點,負責(zé)處理客戶端請求
?????◆其余的都是從節(jié)點,負責(zé)復(fù)制主節(jié)點上的數(shù)據(jù)
?????◆節(jié)點常見的搭配方式為:一主一從、一主多從
?????◆主節(jié)點記錄在其上的所有操作,從節(jié)點定期輪詢主節(jié)點獲取這些操作,然后對自己的數(shù)據(jù)副本執(zhí)行這些操作,從而保證從節(jié)點的數(shù)據(jù)與主節(jié)點一致
?????◆主節(jié)點與從節(jié)點進行數(shù)據(jù)交互保障數(shù)據(jù)的一致性

復(fù)制的特點

?????◆N 個節(jié)點的集群
?????◆任何節(jié)點可作為主節(jié)點
?????◆所有寫入操作都在主節(jié)點上
?????◆自動故障轉(zhuǎn)移
?????◆自動恢復(fù)

實例操作:設(shè)置復(fù)制節(jié)點

step1:創(chuàng)建數(shù)據(jù)庫目錄t1、t2

在Desktop目錄下演示,其它目錄也可以,注意權(quán)限即可

    mkdir t1
    mkdir t2
step2:使用如下格式啟動mongod,注意replSet的名稱是一致的
    mongod --bind_ip 192.168.10.110 --port 27018 --dbpath ~/Desktop/t1 --replSet rs0
    mongod --bind_ip 192.168.10.111 --port 27019 --dbpath ~/Desktop/t2 --replSet rs0
step3:連接主服務(wù)器,此處設(shè)置192.168.10.110:27018為主服務(wù)器
    mongo --host 192.168.10.110 --port 27018
step4:初始化
    rs.initiate()
step5:查看當(dāng)前狀態(tài)
    rs.status()
step6:添加復(fù)本集
    rs.add('192.168.10.111:27019')
step8:新開窗口,連接第二個mongo服務(wù)
    mongo --host 192.168.10.111 --port 27019
step9:向主服務(wù)器中插入數(shù)據(jù)
    use test1
    for(i=0;i<10;i++){db.t1.insert({_id:i})}
       db.t1.find()
step10:在從服務(wù)器中插查詢

?????如果在從服務(wù)器上進行讀操作,需要設(shè)置rs.slaveOk()

    rs.slaveOk()
    db.t1.find()
其它說明

?????刪除從節(jié)點

    rs.remove('192.168.10.111:27019')

?????關(guān)閉主服務(wù)器后,再重新啟動,會發(fā)現(xiàn)原來的從服務(wù)器變?yōu)榱酥鞣?wù)器,新啟動的服務(wù)器(原來的主服務(wù)器)變?yōu)榱藦姆?wù)器

?????熟練掌握MongoDB數(shù)據(jù)庫也是Python工作者必須會的技能之一,對于大
?????量數(shù)據(jù)的分析和提取,放入NoSQL數(shù)據(jù)庫是很好的選擇,MongoDB就是
?????其中之一

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容