MongoDB經常使用命令

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. 查詢表達式依然是個json對象
  2. 查詢表達式匹配的行,將被刪掉
  3. 若是不寫查詢表達式,collections中的全部文檔將被刪掉

例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’}})

修改時的賦值表達式:

  • $set:修改某列的值
  • $unset 刪除某個列
  • $rename 重命名某個列
  • $inc 增加某個列
  • $setOnInsert 當upsert爲true時,而且發生了insert操做時,能夠補充的字段,至關於mysql中的列的默認值

例: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時的備份目錄)

相關文章
相關標籤/搜索