1.查看當前數據庫:show dbsmysql
2.選擇數據庫:use databaseName正則表達式
3.查看當前庫的集合:show tables/collectionssql
4.建立數據庫:use databaseNamemongodb
5.建立集合:
db.createCollection('collectionName')
db.collectionName.insert({})數據庫
6.刪除集合:db.collectionName.drop()json
7.刪除數據庫:db.dropDatabase()數組
8.查詢命令:db.help服務器
9.新增文檔:
db.collectionName.insert({"name":"zhangsan"}) db.collectionName.insert({"_id":1,"name": "lisi"})優化
10.刪除文檔:
db.collectionName.remove(查詢表達式, 選項);
選項是指{justOne:true/false},是否只刪一行, 默認爲falsethis
注意:
例1: 刪除stu表中 sn屬性值爲’001’的文檔
db.stu.remove({sn:’001’});
例2: 刪除stu表中gender屬性爲m的文檔,只刪除1行 db.stu.remove({gender:’m’,true});
11.修改文檔:db.collectionName.update(查詢表達式,新值,選項)
(1) db.news.update({name:'QQ'},{name:'MSN'});
結果: 文檔中的其餘列也不見了,改後只有_id和name列了,新文檔直接替換了舊文檔,而不是修改
(2) 若是是想修改文檔的某列,能夠用$set關鍵字 db.collectionName.update(query,{$set:{name:’QQ’}})
修改時的賦值表達式:
例: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---是指沒有匹配的行,則直接插入該行 例1:db.stu.update({name:'wuyong'},{$set:{name:'junshiwuyong'}},{upsert:true});
若是有name=’wuyong’的文檔,將被修改,若是沒有,將添加此新文檔
例2:db.news.update({_id:99},{x:123,y:234},{upsert:true});
沒有_id=99的文檔被修改,所以直接插入該文檔
(4) multi: 是指修改多行(即便查詢表達式命中多行,默認也只改1行,若是想改多行,能夠用此選項)
db.news.update({age:21},{$set:{age:22}},{multi:true});
12.查詢文檔:db.collectionName.find(查詢表達式,查詢的列)
例1:db.stu.find()
查詢全部文檔,全部內容
例2: db.stu.find({},{gendre:1})
查詢全部文檔,的gender屬性 (_id屬性默認老是查出來)
例3: db.stu.find({},{gender:1, _id:0})
查詢全部文檔的gender屬性,且不查詢_id屬性
例4: db.stu.find({gender:’male’},{name:1,_id:0});
查詢全部gender屬性值爲male的文檔中的name屬性
13.查詢表達式:
(1): 最簡單的查詢表達式
語法: {filed:value}
做用:是指查詢field列的值爲value的文檔
(2): $ne
語法: {field:{$nq:value}}
做用:查filed列的值 不等於 value 的文檔
(3): $nin
語法: {field:{$nin:value}}
做用:查filed列的值 不在 value數組的文檔
(4): $all
語法: {field:{$all:[v1,v2..]}}
做用:是指取出 field列是一個數組,且至少包含 v1,v2值
(5): $exists
語法: {field:{$exists:1}}
做用: 查詢出含有field字段的文檔
(6): $nor
語法: {field:{$nor,[條件1,條件2]}}
做用:是指 全部條件都不知足的文檔爲真返回
(7):用正則表達式查詢 以」諾基亞」開頭的商品
語法: db.goods.find({goods_name:/諾基亞.*/},{goods_name:1});
(8): 用$where表達式來查詢
語法: db.goods.find({$where:'this.cat_id != 3 && this.cat_id != 11'});
(9): $eq
語法:{field: {$eq,value}}
做用:是指知足field值等於value的文檔返回
(10): $gt
語法:{field: {$gt,value}}
做用:是指知足field值大於value的文檔返回
(11): $gte
語法:{field: {$gte,value}}
做用:是指知足field值大於等於value的文檔返回
(12): $lt
語法:{field: {$lt,value}}
做用:是指知足field值小於value的文檔返回
(13): $lte
語法:{field: {$lte,value}}
做用:是指知足field值小於等於value的文檔返回
14.查看語句的執行計劃
db.collectionName.find({"name":"123"}).explain();
15.索引
(1) 查看當前索引狀態:
db.collectionName.getIndexes();
(2) 建立普通的單列索引:
db.collectionName.ensureIndex({field:1/-1}); 1是升續 -1是降續
(3) 刪除單個索引:
db.collectionName.dropIndex({filed:1/-1});
(4) 一下刪除全部索引:
db.collectionName.dropIndexes();
(5) 建立多列索引:
db.collectionName.ensureIndex({field1:1/-1, field2:1/-1});
(6) 建立子文檔索引:
db.collectionName.ensureIndex({filed.subfield:1/-1});
(7) 建立惟一索引:
db.collectionName.ensureIndex({filed.subfield:1/-1}, {unique:true});
(8) 建立稀疏索引:若是針對field作索引,針對不含field列的文檔,將不創建索引. 與之相對,普通索引,會把該文檔的field列的值認爲NULL,創建索引. 根據{email:null}來查詢, 建普通索引能查到,而建稀疏索引查不到數據.
(9) 建立哈希索引(2.4新增的):哈希索引速度比普通索引快,可是,無能對範圍查詢進行優化.適宜於---隨機性強的散列
db.collectionName.ensureIndex({file:’hashed’});
(10) 重建索引一個表通過不少次修改後,致使表的文件產生空洞,索引文件也如此. 能夠經過索引的重建,減小索引文件碎片,並提升索引的效率. db.collectionName.reIndex()
16.用戶
(A) 在mongodb中,有一個admin數據庫, 牽涉到服務器配置層面的操做,須要先切換到admin數據. 即 use admin ,至關於進入超級用戶管理模式.
(B) mongo的用戶是以數據庫爲單位來創建的, 每一個數據庫有本身的管理員.
(C) 咱們在設置用戶時,須要先在admin數據庫下創建管理員,這個管理員登錄後,至關於超級管理員.
(1) 添加用戶:db.addUser(用戶名,密碼,是否只讀)
use admin db.addUser(‘sa’,’sa’,false);
(2) 認證
use test db.auth(用戶名,密碼);
(3) 修改用戶密碼
use test db.changeUserPassword(用戶名, 新密碼);
(4) 刪除用戶
use test db.removeUser(用戶名);
(5) 注意: 若是須要給用戶添加更多的權限,能夠用json結構來傳遞用戶角色參數 例:
use test db.addUser({user:'guan',pwd:'111111',roles:['readWrite,dbAdmin']});
(6) 注意: 添加用戶後,咱們再次退出並登錄,發現依然能夠直接讀數據庫 緣由: mongodb服務器啓動時, 默認不是須要認證的. 要讓用戶生效, 須要啓動服務器時,就指定 --auth 選項. 這樣操做時就須要認證了
17.導入與導出:
(1) 能夠操做的是本地的mongodb服務器,也能夠是遠程的,因此都有以下通用選項: -h host 主機 --port port 端口 -u username 用戶名 -p passwd 密碼
(2) mongoexport 導出json格式的文件 -d 庫名 -c 表名 -f field1,field2...列名 -q 查詢條件 -o 導出的文件名 -- csv 導出csv格式(便於和傳統數據庫交換數據)
例1:導出news整張表到test.json文件中 ./bin/mongoexport -d test -c news -o test.json
例2: 只導出goods_id,goods_name列 ./bin/mongoexport -d test -c goods -f goods_id,goods_name -o goods.json
例3: 只導出價格低於1000元的行 ./bin/mongoexport -d test -c goods -f goods_id,goods_name,shop_price -q ‘{shop_price:{$lt:200}}’ -o goods.json
(3) 導入 -d 待導入的數據庫 -c 待導入的表(不存在會本身建立) --type csv/json(默認) --file 備份文件路徑
例1: 導入json ./bin/mongoimport -d test -c goods --file ./goodsall.json
例2: 導入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) 導出二進制bson結構的數據及其索引信息 -d 庫名 -c 表名 -f field1,field2...列名
例1: mongodum -d test [-c 表名] 默認是導出到mongo下的dump目錄
規律: 1:導出的文件放在以database命名的目錄下 2: 每一個表導出2個文件,分別是bson結構的數據文件, json的索引信息 3: 若是不聲明表名, 導出全部的表
(5) 導入二進制文件 例1:./bin/mongorestore -d test --directoryperdb dump/test/ (mongodump時的備份目錄)