1. 程式人生 > >mongodb的命令列操作命令詳解(增刪改查、高階查詢)

mongodb的命令列操作命令詳解(增刪改查、高階查詢)

本文為上文的續篇,主要講解mongodb在cmd的直接操作命令,我的mongodb是安裝在d:\mongodb下

1,mongodb啟動服務 :

  • 命令列方式啟動:
    . 直接cmd下進入mongodb的bin目錄,輸入mongod.exe –dbpath d:\mongodb\db 啟動成功
  • 配置檔案方式啟動:
    .對於一些大神來說,普通的啟動滿足不了心裡需求(玩笑),對於專業的DBA來說,會在啟動mongodb資料庫例項的時候加進去好多引數以便使得系統執行更高效穩定,但是如果吧引數都載入mongod的後面會使得引數混亂且每次都得手動的敲進去,不好管理,mongodb為此提供了配置檔案啟動的方式
    .新建配置檔案mongodb.cnf 編輯內容 dbpath=d:\mongodb\data\db儲存在bin的同級目錄下,開啟cmd 進入bin下,輸入mongod.exe -f d:\mongodb\mongodb.cnf 啟動成功
  • daemon方式啟動
    .以上的方式都有一個明顯的缺陷,即如果控制檯的介面不小心被關閉,則mongodb的服務也會隨之停止,這帶來了極大的不方便和不安全,這也促使有了daemon啟動方式,這種方式需要加上–fork 即可,但是如果用到fork引數就必須使用 –logpath引數指定日誌檔案路徑。
    .data資料夾下新建log資料夾,並在資料夾下新建log1.log檔案。進入bin目錄,輸入 mongod.exe –dbpath d:\mongodb\data\db –logpath d:\mongodb\data\log\log1.log –fork 啟動成功。
  • mongod引數說明:
    .dbpath 資料庫路徑
    .logpath日誌目錄
    .logappend 錯誤日誌採用追加模式
    .bind_ip 對外服務繫結的ip 一般置為空,即繫結本地多有可用ip上。 但是如果有需要可以單獨制定
    .port 對外服務埠 ,web管理埠一般在這個基礎上+1000
    .fork 服務在後臺以daemon方式執行
    .journal 開啟日誌功能,通過儲存日誌來尖山單機故障的恢復時間。
    .syncdelay 系統同步重新整理磁碟的時間
    .directoryperdb 每個db存放在單獨的目錄中,建議設定該引數
    .maxConns 最大連線數
    .repairpath 執行repair時的臨時路徑,在如果沒有開啟journal的時候,異常down機後,必須執行repair重啟,否則會報錯,上一篇文章有提到。

2,mongodb停止服務 :

  • Control-C
  • db.shutdownServer()
  • 值得注意的是,最好不要用linux的kill命令來殺死程序,這樣會導致資料庫資料的損壞。

3,新建資料庫

  • 在mongodb中,並沒有單獨新建資料庫的命令,mongodb是非關係型資料庫中最像關係型資料庫的資料庫,所以,有很多命令也和sql有一定的相似之處。
  • 開啟資料庫連線:進入到bin目錄 輸入命令:mongo.exe
  • 查詢所有的資料庫 show dbs 或者 show databases
  • 當我們想新建一個沒有的資料庫的時候,例如我們想新建資料庫 testTwo ,直接可以輸入命令 use testTwo即可,在testTwo存在的情況下回切換到testTwo,在不存在的情況下就會新建這個資料庫。

4,插入記錄
- mongodb之下和sql表對應的叫做集合,mongo中沒有表的概念,只有集合的概念,和資料庫類似,集合也無需單獨的新建,在插入記錄的同時,如果存在集合則插入資料到該集合中,如果不存在集合,則新建集合。
- db.user.save({“name”:”wpz”,”password”:”123”});
- 上面的命令代表新建user集合 並插入資料{“name”:”wpz”,”password”:”123”}
- 也可以定義為變數儲存
- i={“name”:”wpz”,”password”:”123”}; db.user.save(i);
- 也可以用更靈活的for迴圈來存貯
- for(var i=1;i<10;i++) db.user.save({“name”:”wpz”,”password”:”123”});

5,普通資料查詢

  • mongodb的資料查詢可以通過find()來查詢,有幾種常見的查詢方式:
  • db.user.find() 查詢出所有物件,這應該是最簡單的全部查詢的寫法
  • 這裡寫圖片描述
  • 第二種,使用遊標來查詢
  • var cursor=db.user.find();
  • while(cursor.hasNext()) printjson(cursor.next());
  • 這裡寫圖片描述
  • 第三種普通查詢,遊標可以看成為陣列,可以查詢陣列上特定位置的值
  • 這裡寫圖片描述
  • 當然還有另外一種方式做陣列
  • 這裡寫圖片描述
  • 還有一種直接列印json形式的查詢方式

6,條件資料查詢

  • 條件資料查詢,就是在查詢中加入過濾條件,mongodb的精確過濾條件是制定查詢資料中json資料。 例如 db.user.find({“age”;”20”}) 相當於sql中的 select * from user where age = ‘20’
  • db.user.find({“age”;”20”}) 這句話結合上面的普通查詢,就可以查詢出大部分想要的資料,但是有時候我們需要指定查詢的欄位:
    這裡寫圖片描述
    3,mongodb為了減少遊標的記憶體開銷還提供了findOne()方法,當然,方法內可以加過濾條件
    . db.user.findOne()
    . db.user.findOne({“name”:”wpz”})
    這兩種寫法都是合法的。
    4,mongodb還提供limit來限制條數
    . db.user.find().limit(2)
    . db.user.find({“name”:”wpz”}).limit(2)
    5,條件符查詢 mongodb支援< <= > >= 四種運算子查詢

    • db.user.find({“age”:{$gt:30}}) age大於30
    • db.user.find({“age”:{$lt:30}}) age小於30
    • db.user.find({“age”:{$gte:30}}) age大於或等於30
    • db.user.find({“age”:{$lte:30}}) age小於或等於30
      多條件查詢
    • db.user.find({“age”:{,gt:10,lte:30}})

    6,匹配所有

    • $all 這個操作符號類似於sql中的in運算子,但是不同的是in只需要滿足 一個值,但是alll需要滿足所有值。
  • db.user.find({“age”:{$all:[6,8]}});

    7,查詢某一個欄位是否存在:$exists

    • db.user.find({“password”:{$exists:true}}); password存在的記錄
    • db.user.find({“password”:{$exists:false}}); password不存在的記錄

    8,null值得處理

    • null處理比較奇怪,因為mongodb中的資料集合不能指定特定的格式,沒有sql中的欄位的概念,就是說,在同一個集合中有的欄位在一條資料中存在,在另一條資料中不存在,所以,要找出改欄位是不是為空,先要判斷這個欄位是不是存在才行。
    • db.user.find({age:{“in":[null],"exists”:true}});

    9,取模運算 $mod

    • 查詢所有age取模10之後為0 的資料,即查詢age為10的倍數的欄位:
      db.user.find({age:{$mod:[10,0]}});

    10,不等於 $ne –> (not equals)

    • 查詢所有age不等於10 的資料
    • db.user.find({age:{$ne:10}});

    11,包含 $in

    • 查詢所有age等於10 或者20 的資料
    • db.user.find({age:{$in:[10,20]}});

    12,不包含 $nin

    • 查詢所有age不等於10 或者20 的資料
    • db.user.find({age:{$nin:[10,20]}});

    13,陣列元素的個數 $size

    • 查詢age資料元素個數為3的資料
    • db.user.find({age:{$size:3}});

    14,正則表示式匹配查詢

    • name不以wpz開頭的資料
    • db.user.find({“name”:{$not:/^wpz.*/}});

15,count查詢條數
- db.user.find().count();

16,skip 設定查詢資料的起點

查詢從第三條資料之後的五條資料
- db.user.find().skip(3).limit(5);

17 排序 sort
- db.user.find().sort({age:1}); 按照age升序
- db.user.find().sort({age:-1}); 按照age降序

mongodb也支援儲存過程的查詢。

7,資料修改更新

  1. mongodb的修改是比較煩的一種 ,要用到$set:
  2. 例如,吧mongodb中,name為wpz,修改為 wpz_new
    db.user.update({“name”:”wpz”},{$set:”name”:”wpz_new”});

8,資料刪除

  1. mongodb的刪除比較簡單,格式如下:
    db.user.remove({“name”:”wpz”});

其他說明

  1. 在上面查詢出的資料可以看出,所有的資料不管指定或者不指定都會帶有_id欄位,這個欄位相當於mongodb中的uuid,是資料唯一性的標示,可以理解為sql中的主鍵。
  2. mongodb解壓的目錄:
    這裡寫圖片描述
    每一個exe都有對應的作用,相當於mongodb提供的一些常用的工具,例如,第一個是講bson格式檔案轉存在json格式資料的工具,讀者可自行查詢每個工具的作用。

3,mongodb也提供了一些GUI管理工具,視覺化的管理mongodb資料庫。
.mongoVUE:提供mongodb的基本操作,優點是簡單易用,但是總體上功能比較弱
.RockMongo 是windows平臺首選的mongodb管理工具,速度快,安裝簡單,支援多種語言,支援多主機,可以保證資料的安全性。
.MongoHUB 是針對mac平臺的mongodb管理工具。

小廣告:本人出售java的1000多GB的視訊、文件資料。需要的新增QQ:205267898獲取。包含javaEE 體系的幾乎所有知識點。