git clone ...
cd mongo
mongod啟動mongodb服務(wù)
mongo:mongodb客戶端
mongoimport:導(dǎo)入
mongoexport:導(dǎo)出
mongodump,mongorestore導(dǎo)入導(dǎo)出二進(jìn)制數(shù)據(jù)爬范,不能讀取唧躲,一般做數(shù)據(jù)的備份與恢復(fù)
mongooplog操作日志的回放,復(fù)制集中操作日志
mongostat查看mongodb服務(wù)器的各種狀態(tài)
mongodb安裝完成后秦叛,搭建一個簡單的mongodb服務(wù)器 方式:
1.創(chuàng)建服務(wù)目錄:mkdir mongodb_simple & cd mongodb_simple/
2.創(chuàng)建data目錄,存儲數(shù)據(jù)庫的數(shù)據(jù)文件:mkdir data
3.創(chuàng)建log文件夾瞧预,存儲日志文件:mkdir log
4.創(chuàng)建conf目錄,存儲啟動配置文件:mkdir conf
mongod.conf:port = 12345端口dbpath = data數(shù)據(jù)存儲路徑logpath = log/mongod.log日志文件存儲路徑fork = true在linux下表明這是啟動一個后臺進(jìn)程,window下無效胀糜。
類比js颅拦,一個對象就是一個文檔。集合是一組文檔教藻。
show dbs查看所有數(shù)據(jù)庫
use local連接local數(shù)據(jù)庫(有就連接距帅,沒有就創(chuàng)建并連接)
db.dropDatabase()刪除數(shù)據(jù)庫
db.wang_handsome.insert({x:1)}在local數(shù)據(jù)庫里創(chuàng)建wang_handsome表,并插入x:1的數(shù)據(jù)
db.wang_handsome.find()列出所有集合括堤,加參數(shù)為查找findOne()查找一條
db.wang_handsome.find().count()查看共有多少條數(shù)據(jù)
for(i =3;i < 99;i++)db.wang_handsome.insert({x:i)}循環(huán)插入若干條數(shù)據(jù)碌秸。
在表中都有唯一的“_id”,自動生成,也可以自己創(chuàng)建悄窃,不能重復(fù)
db.wang_handsome.find().skip(3).limit(2).sort({x:1})過濾掉前三條數(shù)據(jù)讥电,限制只返回兩條數(shù)據(jù),并使用x:1排序
db.imooc_collection.update({x:6}, {$set:{y:10}})將數(shù)據(jù)更新广匙,(查找允趟,更新)$set部分更新
db.imooc_collection.update({y:5}, {y:10},true)更新不存在的數(shù)據(jù),會自動生成
默認(rèn)情況多條一樣的數(shù)據(jù)鸦致,update只會更新第一條潮剪,
db.imooc_collection.update({y:5}, {$set:{y:10}},false,true) 找不到不覆蓋,更新所有
db.imooc_collection.remove({y:10})刪除全部y
db.imooc_collection.drop()清空表內(nèi)容
db.imooc_collection.getIndexes()查看當(dāng)前表索引
db.imooc_collection.ensureIndex({x:1})創(chuàng)建一個索引
單鍵索引:
多鍵查詢
查詢條件不只有一個時分唾,建立復(fù)合索引db.imooc_collection.ensureIndex({x:1,y:1})
過期索引抗碰,在一段時間后會過期的索引,索引過期后绽乔,相應(yīng)的數(shù)據(jù)也會被刪除弧蝇。比如用戶的登陸信息,存儲的日志等折砸。db.imooc_collection.ensureIndex({x:1},{expireAfterSeconds:10}),要加入第二個參數(shù)過期時間看疗。
使用mongodb的索引,就不能使用時間戳。db.wang_handsome.insert({time:1)}不能被自動刪除,time:new Date()就可以肆氓。必須是ISODate或ISODate數(shù)組。如果指定了ISO數(shù)組怖辆,則按照最小的時間刪除。過期索引不能是符合索引删顶,因?yàn)椴荒苡袃蓚€時間戳竖螃。刪除時間不精確,刪除過程每60s跑一次逗余,而且刪除過程也需要時間特咆,所以有誤差。
全局索引
地理位置索引:可實(shí)現(xiàn)社交軟件的獲取周邊用戶信息录粱。db.article.ensureIndex({$**, "text"})對整個集合創(chuàng)建一個大的索引坚弱。
db.article.ensureIndex({"article", "text"})
使用全文索引進(jìn)行查詢?yōu)榛虿樵?/p>
db.article.find({$text:{$search:"aa bb cc"}})
db.article.find({$text:{$search:"aa bb -cc"}})負(fù)號為不存在
db.article.find({$text:{$search:"\"aa\" \"bb\" \"-cc\""}})與方式查找蜀备。
全文索引相似度:$meta操作符:{score:{$meta: "textScore"}}加在插入數(shù)據(jù)的第二個參數(shù),排序sort里也是這個參數(shù)荒叶。
全文索引限制:每次查詢中碾阁,只能指定一個$text查詢。不能出現(xiàn)在$nor查詢中些楣。
查詢中如果有$text, hint強(qiáng)制索引將不起作用脂凶。
mongodb全文索引不支持中文。
指定索引名字:db.article.ensureIndex({"article", "text"}, {name: "xxx"})
db.article.ensureIndex({"article", "text"}, {unique:true})確定數(shù)據(jù)的唯一性愁茁,不能插入完全一樣的數(shù)據(jù)蚕钦。
地理位置索引: 查找一個點(diǎn)一定范圍的其它點(diǎn),查找一定區(qū)域內(nèi)的點(diǎn)鹅很。
db.location.ensureIndex({w:"2d"})
db.location.insert({w: [1,1]})
位置表示方式:經(jīng)緯度[經(jīng)度嘶居,緯度]。經(jīng)度[-180,180],緯度[-90,90]
db.location.find({w:{$near:[1,1], $maxDistance:10}})距離1促煮,1最近的不超過10的點(diǎn)邮屁。這里不支持minDistance。
$geoWithin查詢某個形狀內(nèi)的點(diǎn)菠齿。
db.location.find({w:{$geoWithin: {$box:[[0,0], [2, 2]]}}})
db.location.find(w: {$geoWithin: {$center: [[0,0], 5]}})
db.location.find(w: {$geoWithin: {$polygon: [[0,0], [1,1], [2,2]]})
db.geoCommand({geoNear: "location", near: [1,2], maxDistance: 10, num: 1})必near更加實(shí)用佑吝。
球面地理位置索引:db.location.ensureIndex({w:"2dsphere"})
索引好處:加快索引相關(guān)數(shù)據(jù)的查詢。
壞處:增加磁盤空間消耗绳匀,降低寫入性能芋忿。
.explained()可以查看某一次查詢索引的使用情況。
mongodb安全:
物理隔離:不現(xiàn)實(shí)疾棵。
網(wǎng)絡(luò)隔離:
防火墻隔離:配置某些id能訪問戈钢。
用戶名密碼:安全級別最低。
mongodb默認(rèn)不開啟權(quán)限認(rèn)證
開啟的兩種方法:auth=true是尔,keyfile
mongodb創(chuàng)建用戶:db.createUser({各種參數(shù)});