mongob復(fù)習(xí)

mongod服務(wù)嚼沿、開啟估盘、關(guān)閉、重啟骡尽、
sudo service mongod start
sudo service mongod stop
sudo service mongod restart

配置文件路徑:/etc/mongod.conf

3遣妥、鏈接
mongo
mongo -h ip:port
mongo --host ip --port port

4、mongodb的操作
數(shù)據(jù)庫
查看所有數(shù)據(jù)庫:show dbs
查看當前所在數(shù)據(jù)庫:db
刪除數(shù)據(jù)庫db.dropDatabase()
查看數(shù)據(jù)庫的詳細信息: db.stats()

5攀细、集合
db.createCollection('集合名字'箫踩,屬性)

設(shè)置固定大小集合:
db.createCollection('集合名',{capped:true,size:大小,max:最大文檔數(shù)量})

刪除集合:db.集合名.drop()

6谭贪、文檔的操作

增加一條:
db.集合名.insert({key:'value'})

增加多條:
db.集合名.insert({key1:'value',key2:'value',key3:'value'})

刪除:
刪除所有文檔:
db.集合名.remove({})

刪除符合條件所有文檔:
db.集合名.remove({key:value})

刪除一條:

db.集合名.remove({key:values},{justOne:true})

修改:

更新文檔中的某些建境钟,鍵存在跟新,不存在添加
db.集合名.update({key:value},{$set:{key:value}})

全文檔更新:

db.集合名.update({key:value},{key:value})

全文檔更新:如果沒找到作為一個新文檔插入0)

db.集合名.update({key:value},{key:value})

save:

1俭识、情況:加入我們更新的文檔id存在則修改全文檔更新慨削,不存在作為新文檔插入
db.集合名.save({_id:'value',key:value,key:value,.....})

查找:

db.集合名.find({key:value})根據(jù)條件查找

限制查詢:

db.集合名.find({條件}).limit(條數(shù))#返回幾條結(jié)果

跳過查詢:

db.集合名.find({條件}).skip(num)#從幾條開始

結(jié)合使用:

db.集合名.find({條件}).skip().limit()#結(jié)果從幾條開始,返回幾條結(jié)果

自定義查詢:

db.集合名.find({$where:function(){return this.age>20}})

排序:sort 1 升序 -1 降序

db.集合名.find({條件}).sort({key:1})

投影:project 1 表示顯示 0 表示不顯示

db.集合名,find({},{name:1,_id:0})
db.集合名.find({},{name:0})

去重:distinct

db.集合名.distinct({age,{name:value}}) #查看姓名是**的人中套媚,年齡都是多大

count()#計算總和

db.集合名.find().count()
db.集合名.count({條件})

type

db.集合名.find({key:{$type:'string'}})#返回所有鍵為字符串類型的文檔

比較運算符

= db.集合名.find({age:20}).count()

小于 lt 小于等于lte
db.集合名.find({key:{$lt:10000}}).count()#薪資小于10000有多少人

大于gt 大于等于gte 不等于$ne

缚态、邏輯運算符、

or db.集合名.find({or:[{xinzi:{$gt:10000}},{name:'小明'}]})#薪資大于10000或叫小明的人

范圍運算符

in db.集合名.find({age:{in:[19,20,30]})年齡是19堤瘤、20玫芦、30 三數(shù)任意一個
$nin 不再之內(nèi)的

正則查詢:(一定是子符串)

db.集合名.find({name:/^李.?/}) #姓李的人查出來
db.集合名.find({name:{$regex:'^李.
?'}})

自定義查詢:

db.集合名.find({$where:function(){reture this.name == '李磊'}})

mongd聚合操作

groupproject
matchskip
limitunwind
$sort

函數(shù)

sumavg
maxmin
pushlast
$first

group:分組 db.集合名.aggregate({group:{_id:'class',count:{sum:1}}})#根據(jù)class分組本辐,并求出班級都有幾個

班級的平均年齡:

db.集合名.aggregate({group:{_id:'key',avg:{avg:'age'}}})

返回班級中的年齡最大致桥帆,最小年齡

db.集合名.aggregate({group:{_id:'key',maxage:{max:'age'}}})
db.集合名.aggregate({group:{_id:'key',minage:{min:'age'}}})

push:根據(jù)班級進行分組医增,返回班級下所有的同學(xué)名字,返回的是一個數(shù)組

db.集合名.aggregate({group:{_id:'class',names:{push:name}}})

last返回集合最后一個名字

db.集合名.aggregate({group:{_id:'null',lasts:{last:'$name'}}})

last返回集合第一個名字

db.集合名.aggregate({group:{_id:'null',firsts:{first:'$name'}}})

project 只返回習(xí)性名老虫、年齡

db.集合名.aggregate([{$project:{name:1,age:20,_id:0}}])

match 過濾 返回年齡在90 - 100 之間的結(jié)果

db.集合名.aggregate([{match:{age:{gt:90,$lt:100}}}])

sort 返回年齡在90 - 100 之間的結(jié)果 排序

db.集合名.aggregate([{match:{age:{gt:90,lt:100}}},{sort:{age:-1}}])

unwind:將文檔中的鍵對應(yīng)的數(shù)組叶骨,拆分成單挑獨立數(shù)據(jù)

tags:[aaa,ddd,fff]
db.集合名.aggregate([{unwind:'tags'}])

跳過和限制查詢

db.集合名.aggregate([{match:{age:{gt:30}}},{skip:2},{limit:3}])

#######################8、索引
_id索引 在創(chuàng)建文檔的時候自動創(chuàng)建 (mongodb的索引都在內(nèi)存中)
普通张遭、索引:
單鍵索引
db.集合名.createIndex({key:1})
復(fù)合索引
db.集合名.createIndex({key:1,key1:-1})
子文檔索引
{students:{name:xiaoming,age:20}}
db.集合名.createIndex({'students.name':1,'students.age':-1})
db.集合名.find({'students.name':'xiaoming','students.age':20})

數(shù)組索引
db.集合名.createIndex({tags:1})

全文索引(注意:全文索引中只能創(chuàng)建一個)
db.集合名.createIndex({key:'text'})
使用他:db.集合名.find({text:{search:'關(guān)鍵詞'}})

索引屬性:
background 在后臺創(chuàng)建索引
unique 創(chuàng)建唯一索引
name:給索引取名字
sparse 稀疏索引(如果設(shè)置了這個屬性邓萨,文檔中如果含有這個索引鍵,就創(chuàng)建菊卷,否則不創(chuàng)建)

TTL expireAfterSeconds 秒 :該屬性設(shè)置在文檔中存活的時間缔恳,超過則刪除(注意:我們直接插入一個時間,會跟文檔中真正插入的事件洁闰,相差8小時)
ttl(TTL)補充:
—id不能設(shè)置為日期索引
不能將已經(jīng)創(chuàng)建的索引修改歉甚。只能刪除,重新創(chuàng)建
TTL不能是復(fù)合索引扑眉,只能是單鍵索引
在固定的集合中不能創(chuàng)建TTL索引

刪除索引

db.集合名.dropIndex('索引名')

刪除所有索引

db.集合名.dropIndexes()

查看集合中的所有索引

db.集合名.getIndexes()

查看集合中的索引總大小

db.集合名.totalIndexSize()

強制索引

db.集合名.find({條件}).hint(‘索引名’)

索引的重建纸泄;

db.集合名.reIndex()

建立索引的注意事項、優(yōu)點腰素、缺點

優(yōu)點:相當于創(chuàng)建了一個目錄聘裁,能過提高查找的效率
缺點:對于插入,刪除弓千、修改數(shù)據(jù)會變慢衡便,因為在做修改數(shù)據(jù)時,索引也會發(fā)生變化洋访,這樣會降低效率 2镣陕、創(chuàng)建索引會產(chǎn)生額外的 數(shù)據(jù)加大對硬件的要求
會額外占用內(nèi)存
注意事項:1、盡量減少創(chuàng)建不必要的索引2姻政、經(jīng)常變動的鍵不必創(chuàng)建索引
3呆抑、不會成為查詢條件的值不需要創(chuàng)建索引 4、mongodb集合中最大索引個數(shù)不能超過64個汁展、索引的名稱不能超過128個字符鹊碍,符合索引最大值只能右31個字段
5、不能命中的索引情況in \nin 范圍運算符善镰,以及比較運算符 6妹萨、mongodb中索引存放在內(nèi)存中必須確保不會超過內(nèi)存
如果超過內(nèi)存最大。mongodb 會自動刪除一些索引

創(chuàng)建用戶

創(chuàng)建超級管理員

use admin
db.createUser({
'user':'username'
'pwd':'123456'
'rloes':[{role:root,db.:'admin']
})

打開mongodb的安全設(shè)置
sudo vim /etc/mongod.conf

低版本的

sudo vim /etc/mongodb.conf

高版本

sudo vim /etc/mongod.conf
修改完畢之后重置:sudo service mongod restart

使用超管登錄:
mongo -u '用戶名' -p(’密碼‘) --authenticationDatabase 'admin'

修改用戶的信息:
db.updateUser('用戶名'炫欺,{pwd:'新密碼'})
修改用戶民:
db.updateUser('用戶名',{user:‘新用戶名’})
刪除權(quán)限:
db.revokeRolesFromUser('用戶名',[{role:'權(quán)限'熏兄,db:'數(shù)據(jù)庫'}])
添加權(quán)限:
db.grantRolesToUser('用戶名'品洛,[{role:'權(quán)限',db:'數(shù)據(jù)庫'}])
1树姨、刪除用戶:
db.dropUser('用戶名')
2、刪除用戶:
db.system.users.remove('用戶名')
3桥状、查看所有用戶:
db.system.users.fond()

數(shù)據(jù)庫的備份

mongodump -h ip:端口 -d 數(shù)據(jù)庫 -o 路徑
備份集合
mongodump -h ip:端口 -d 數(shù)據(jù)庫 集合名 -o 路徑
用超級用戶進行操作
mongodump -u 'boss' -p '123456' --authenticationDatabase 'admin' -d jobs -o ~/桌面/dump/

備份所有數(shù)據(jù)庫

mongodump -h ip:端口 -o 路徑

恢復(fù)數(shù)據(jù)庫

mongorestore -h 127.0.0.1:27017 -d 數(shù)據(jù)庫名稱 --dir ~/Desktop/數(shù)據(jù)庫備份的路徑/jobs

恢復(fù)所有數(shù)據(jù)庫

mongorestore -h ip:端口 --dir 路徑

導(dǎo)出

mongoexport -d 數(shù)據(jù)庫名 -c 集合 -o 路徑/文件名.json --type json
mongoexport -d 數(shù)據(jù)庫名 -c 集合 -o 路徑/文件名.csv --type csv -f '鍵名帽揪,...'

導(dǎo)入

mongoimport -d 數(shù)據(jù)庫名 -c 集合名 --file 路徑/文件名.json --type json

mongoinport -d 數(shù)據(jù)庫名 -c 集合名 --file 路徑/文件名.csv --headerline --type csv

mongodb狀態(tài)檢測

mongostat
mongotop

mongod副本集(主從備份)

目的:防止數(shù)據(jù)災(zāi)難 、實時備份辅斟、實現(xiàn)主從數(shù)據(jù)一致性转晰、讀寫分離、無宕機行為士飒、分擔(dān)主服務(wù)器的壓力
缺點:具有中心化查邢,所有的增刪改操作都需要在主節(jié)點上完成,對主節(jié)點的壓力較大酵幕,對主機的性能要求比較高

如何實現(xiàn)副本集:

開啟mongod服務(wù)扰藕,至少兩個
mongod --bind_ip ip --port 端口號 --dapath 數(shù)據(jù)存放的路徑 --replSet rs0
例題:mongod --bind_ip 192.168.43.131 --port 27020 --dbpath ~/桌面/mongodb1 --replSet rs0

怎么鏈接?
mongo -- host ip --port 端口號

確定主服務(wù)器
rs.initiate()

添加從節(jié)點
rs.add(ip:端口號)

激活從節(jié)點
rs.slaveOk()

mongodb與python交互

監(jiān)控狀態(tài)

#service mongod start

mongostat

mongodb與pthon交互

pip3 install pymongo

import pymongo
from bson.objectid import ObjectId

創(chuàng)建mongo客戶端鏈接

mongoConn = pymongo.MongoClient('localhost',27017)

第二種

mongoConn = pymongo.MongoClient('mongodb://localhost:27017/')

第三種用用戶密碼

mongoConn = pymongo.MongoClient('mongodb://boss:123456@localhost:27017/')

操作數(shù)據(jù)庫下的集合

use_db = mongoConn.數(shù)據(jù)庫

use_db = mongoConn.mongotest

獲取數(shù)據(jù)庫下要操作的集合

use_col = use_db.class1804

文檔操作

def add_data():

document={

'name':'liyong',

'age':20,

'gender':'男',

'calss':'1804'

}

use_col.insert(document)

def delete_data():
result = use_col.delete_one({})

#默認刪除一條
result = use_col.remove({'name':'liyong'},multi=False)

def update_date():
#result = use_col.update({'name':'liyong'},{'$set':{'age':30}})
#更新全部

result = use_col.update({'name':'liyong'},{'name':'lisi','age':40})

#更新多條

result = use_col.update_many({'name':'liyong'},{'name':'lisi','age':40})

#save()
#1芳撒、情況:加入我們更新的文檔id存在則修改全文檔更新邓深,不存在作為新文檔插入
resule=use_col.save({_id:'5b83725a9e3227192a28178b',address:'beijing'})
#db.集合名.save({_id:'value',key:value,key:value,.....})
result = use_col.save()

返回多條

def find_data():
#find_one查詢時會返回一個字典
result = use_col.find_one({'name':'liyong'})
print(result)
#跳過查詢
result = use_col.find({}).skip(2).limit(4)

if name == 'main':

add_data()

update_date()

find_data()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市笔刹,隨后出現(xiàn)的幾起案子芥备,更是在濱河造成了極大的恐慌,老刑警劉巖舌菜,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萌壳,死亡現(xiàn)場離奇詭異,居然都是意外死亡酷师,警方通過查閱死者的電腦和手機讶凉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來山孔,“玉大人懂讯,你說我怎么就攤上這事√ǖ撸” “怎么了褐望?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長串前。 經(jīng)常有香客問我瘫里,道長,這世上最難降的妖魔是什么荡碾? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任谨读,我火速辦了婚禮,結(jié)果婚禮上坛吁,老公的妹妹穿的比我還像新娘劳殖。我一直安慰自己铐尚,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布哆姻。 她就那樣靜靜地躺著宣增,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矛缨。 梳的紋絲不亂的頭發(fā)上爹脾,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音箕昭,去河邊找鬼灵妨。 笑死,一個胖子當著我的面吹牛盟广,可吹牛的內(nèi)容都是我干的闷串。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼筋量,長吁一口氣:“原來是場噩夢啊……” “哼烹吵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桨武,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤肋拔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后呀酸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凉蜂,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年性誉,在試婚紗的時候發(fā)現(xiàn)自己被綠了窿吩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡错览,死狀恐怖纫雁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情倾哺,我是刑警寧澤轧邪,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站羞海,受9級特大地震影響忌愚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜却邓,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一硕糊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦癌幕、人聲如沸衙耕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至时鸵,卻和暖如春胶逢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背饰潜。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工初坠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彭雾。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓碟刺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親薯酝。 傳聞我的和親對象是個殘疾皇子半沽,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容