1.查看當(dāng)前數(shù)據(jù)庫(kù):show dbs
2.選擇數(shù)據(jù)庫(kù):use databaseName
3.查看當(dāng)前庫(kù)的集合:show tables/collections
4.創(chuàng)建數(shù)據(jù)庫(kù):use databaseName
5.創(chuàng)建集合:db.createCollection('collectionName')/db.collectionName.insert({})
6.刪除集合:db.collectionName.drop()
7.刪除數(shù)據(jù)庫(kù):db.dropDatabase()
8.查詢命令:db.help
9.新增文檔:
db.collectionName.insert({"name":"zhangsan"})
db.collectionName.insert({"_id":1,"name": "lisi"})
10.刪除文檔:db.collectionName.remove(查詢表達(dá)式, 選項(xiàng));
選項(xiàng)是指 {justOne:true/false},是否只刪一行, 默認(rèn)為false
注意
1: 查詢表達(dá)式依然是個(gè)json對(duì)象
2: 查詢表達(dá)式匹配的行,將被刪掉.
3: 如果不寫查詢表達(dá)式,collections中的所有文檔將被刪掉.
例1: db.stu.remove({sn:’001’});
刪除stu表中 sn屬性值為’001’的文檔
例2: db.stu.remove({gender:’m’,true});
刪除stu表中g(shù)ender屬性為m的文檔,只刪除1行.
11.修改文檔:db.collectionName.update(查詢表達(dá)式,新值,選項(xiàng));
(1) db.news.update({name:'QQ'},{name:'MSN'});
是指選中news表中,name值為QQ的文檔,并把其文檔值改為{name:’MSN’},
結(jié)果: 文檔中的其他列也不見(jiàn)了,改后只有_id和name列了.
即--新文檔直接替換了舊文檔,而不是修改
(2) 如果是想修改文檔的某列,可以用$set關(guān)鍵字
db.collectionName.update(query,{$set:{name:’QQ’}})
修改時(shí)的賦值表達(dá)式:
$set:修改某列的值
$unset 刪除某個(gè)列
$rename 重命名某個(gè)列
$inc 增長(zhǎng)某個(gè)列
$setOnInsert 當(dāng)upsert為true時(shí),并且發(fā)生了insert操作時(shí),可以補(bǔ)充的字段,相當(dāng)于mysql中的列的默認(rèn)值
例:db.user.update({name:'lisi'},{$set:{area:'chaoyang'},$unset:{height:1},$inc:{age:1},$rename:{sex:'gender'}});
(3) Option的作用:{upsert:true/false,multi:true/false}
Upsert---是指沒(méi)有匹配的行,則直接插入該行.(和mysql中的replace一樣)
例1:db.stu.update({name:'wuyong'},{$set:{name:'junshiwuyong'}},{upsert:true});
如果有name=’wuyong’的文檔,將被修改
如果沒(méi)有,將添加此新文檔
例2:db.news.update({_id:99},{x:123,y:234},{upsert:true});
沒(méi)有_id=99的文檔被修改,因此直接插入該文檔
(4) multi: 是指修改多行(即使查詢表達(dá)式命中多行,默認(rèn)也只改1行,如果想改多行,可以用此選項(xiàng))
db.news.update({age:21},{$set:{age:22}},{multi:true});
則把news中所有age=21的文檔,都修改
12.查詢文檔:db.collectionName.find(查詢表達(dá)式,查詢的列)
例1:db.stu.find()
查詢所有文檔 所有內(nèi)容
例2: db.stu.find({},{gendre:1})
查詢所有文檔,的gender屬性 (_id屬性默認(rèn)總是查出來(lái))
例3: db.stu.find({},{gender:1, _id:0})
查詢所有文檔的gender屬性,且不查詢_id屬性
例4: db.stu.find({gender:’male’},{name:1,_id:0});
查詢所有g(shù)ender屬性值為male的文檔中的name屬性
13.查詢表達(dá)式:
(1): 最簡(jiǎn)單的查詢表達(dá)式
語(yǔ)法: {filed:value}
作用:是指查詢field列的值為value的文檔
(2): $ne
語(yǔ)法: {field:{$nq:value}}
作用:查filed列的值 不等于 value 的文檔
(3): $nin
語(yǔ)法: {field:{$nin:value}}
作用:查filed列的值 不在 value數(shù)組的文檔
(4): $all
語(yǔ)法: {field:{$all:[v1,v2..]}}
作用:是指取出 field列是一個(gè)數(shù)組,且至少包含 v1,v2值
(5): $exists
語(yǔ)法: {field:{$exists:1}}
作用: 查詢出含有field字段的文檔
(6): $nor
語(yǔ)法: {field:{$nor,[條件1,條件2]}}
作用:是指 所有條件都不滿足的文檔為真返回
(7):用正則表達(dá)式查詢 以”諾基亞”開(kāi)頭的商品
語(yǔ)法: db.goods.find({goods_name:/諾基亞.*/},{goods_name:1});
(8): 用$where表達(dá)式來(lái)查詢
語(yǔ)法: db.goods.find({$where:'this.cat_id != 3 && this.cat_id != 11'});
(9): $eq
語(yǔ)法:{field: {$eq,value}}
作用:是指滿足field值等于value的文檔返回
(10): $gt
語(yǔ)法:{field: {$gt,value}}
作用:是指滿足field值大于value的文檔返回
(11): $gte
語(yǔ)法:{field: {$gte,value}}
作用:是指滿足field值大于等于value的文檔返回
(12): $lt
語(yǔ)法:{field: {$lt,value}}
作用:是指滿足field值小于value的文檔返回
(13): $lte
語(yǔ)法:{field: {$lte,value}}
作用:是指滿足field值小于等于value的文檔返回
14.查看語(yǔ)句的執(zhí)行計(jì)劃
db.collectionName.find({"name":"123"}).explain();
15.索引
(1) 查看當(dāng)前索引狀態(tài): db.collectionName.getIndexes();
(2) 創(chuàng)建普通的單列索引:db.collectionName.ensureIndex({field:1/-1}); 1是升續(xù) -1是降續(xù)
(3) 刪除單個(gè)索引:db.collectionName.dropIndex({filed:1/-1});
(4) 一下刪除所有索引:db.collectionName.dropIndexes();
(5) 創(chuàng)建多列索引 :db.collectionName.ensureIndex({field1:1/-1, field2:1/-1});
(6) 創(chuàng)建子文檔索引:db.collectionName.ensureIndex({filed.subfield:1/-1});
(7) 創(chuàng)建唯一索引:db.collectionName.ensureIndex({filed.subfield:1/-1}, {unique:true});
(8) 創(chuàng)建稀疏索引:如果針對(duì)field做索引,針對(duì)不含field列的文檔,將不建立索引.
與之相對(duì),普通索引,會(huì)把該文檔的field列的值認(rèn)為NULL,并建索引.
根據(jù){email:null}來(lái)查詢, 建普通索引能查到,而建稀疏索引查不到數(shù)據(jù).
(9) 創(chuàng)建哈希索引(2.4新增的):哈希索引速度比普通索引快,但是,無(wú)能對(duì)范圍查詢進(jìn)行優(yōu)化.適宜于---隨機(jī)性強(qiáng)的散列
db.collectionName.ensureIndex({file:’hashed’});
(10) 重建索引一個(gè)表經(jīng)過(guò)很多次修改后,導(dǎo)致表的文件產(chǎn)生空洞,索引文件也如此.
可以通過(guò)索引的重建,減少索引文件碎片,并提高索引的效率.
db.collectionName.reIndex()
16.用戶
(A) 在mongodb中,有一個(gè)admin數(shù)據(jù)庫(kù), 牽涉到服務(wù)器配置層面的操作,需要先切換到admin數(shù)據(jù).
即 use admin ,相當(dāng)于進(jìn)入超級(jí)用戶管理模式.
(B) mongo的用戶是以數(shù)據(jù)庫(kù)為單位來(lái)建立的, 每個(gè)數(shù)據(jù)庫(kù)有自己的管理員.
(C) 我們?cè)谠O(shè)置用戶時(shí),需要先在admin數(shù)據(jù)庫(kù)下建立管理員,這個(gè)管理員登陸后,相當(dāng)于超級(jí)管理員.
(1) 添加用戶:db.addUser(用戶名,密碼,是否只讀)
use admin
db.addUser(‘sa’,’sa’,false);
(2) 認(rèn)證
use test
db.auth(用戶名,密碼);
(3) 修改用戶密碼
use test
db.changeUserPassword(用戶名, 新密碼);
(4) 刪除用戶
use test
db.removeUser(用戶名);
(5) 注意: 如果需要給用戶添加更多的權(quán)限,可以用json結(jié)構(gòu)來(lái)傳遞用戶角色參數(shù)
例:
use test
db.addUser({user:'guan',pwd:'111111',roles:['readWrite,dbAdmin']});
(6) 注意: 添加用戶后,我們?cè)俅瓮顺霾⒌顷?發(fā)現(xiàn)依然可以直接讀數(shù)據(jù)庫(kù)
原因: mongodb服務(wù)器啟動(dòng)時(shí), 默認(rèn)不是需要認(rèn)證的.
要讓用戶生效, 需要啟動(dòng)服務(wù)器時(shí),就指定 --auth 選項(xiàng).
這樣, 操作時(shí),就需要認(rèn)證了.
17.導(dǎo)入與導(dǎo)出:
(1) 可以操作的是本地的mongodb服務(wù)器,也可以是遠(yuǎn)程的,所以都有如下通用選項(xiàng):
-h host 主機(jī)
--port port 端口
-u username 用戶名
-p passwd 密碼
(2) mongoexport 導(dǎo)出json格式的文件
-d 庫(kù)名
-c 表名
-f field1,field2...列名
-q 查詢條件
-o 導(dǎo)出的文件名
-- csv 導(dǎo)出csv格式(便于和傳統(tǒng)數(shù)據(jù)庫(kù)交換數(shù)據(jù))
例1:導(dǎo)出news整張表到test.json文件中
./bin/mongoexport -d test -c news -o test.json
例2: 只導(dǎo)出goods_id,goods_name列
./bin/mongoexport -d test -c goods -f goods_id,goods_name -o goods.json
例3: 只導(dǎo)出價(jià)格低于1000元的行
./bin/mongoexport -d test -c goods -f goods_id,goods_name,shop_price -q ‘{shop_price:{$lt:200}}’ -o goods.json
(3) 導(dǎo)入
-d 待導(dǎo)入的數(shù)據(jù)庫(kù)
-c 待導(dǎo)入的表(不存在會(huì)自己創(chuàng)建)
--type csv/json(默認(rèn))
--file 備份文件路徑
例1: 導(dǎo)入json
./bin/mongoimport -d test -c goods --file ./goodsall.json
例2: 導(dǎo)入csv
./bin/mongoimport -d test -c goods --type csv -f goods_id,goods_name --file ./goodsall.csv
./bin/mongoimport -d test -c goods --type csv --headline -f goods_id,goods_name --file ./goodsall.csv
(4) 導(dǎo)出二進(jìn)制bson結(jié)構(gòu)的數(shù)據(jù)及其索引信息
-d 庫(kù)名
-c 表名
-f field1,field2...列名
例1:
mongodum -d test [-c 表名] 默認(rèn)是導(dǎo)出到mongo下的dump目錄
規(guī)律:
1:導(dǎo)出的文件放在以database命名的目錄下
2: 每個(gè)表導(dǎo)出2個(gè)文件,分別是bson結(jié)構(gòu)的數(shù)據(jù)文件, json的索引信息
3: 如果不聲明表名, 導(dǎo)出所有的表
(5) 導(dǎo)入二進(jìn)制文件
例1:./bin/mongorestore -d test --directoryperdb dump/test/ (mongodump時(shí)的備份目錄)