1. 程式人生 > >MongoDB+MongoVUE安裝及入門

MongoDB+MongoVUE安裝及入門

前言及概念

據說nodejs和MongoDB是一對好基友,於是就忍不住去學習瞭解了一下MongoDB相關的一些東西, 那麼,MongoDB是什麼?這裡的五件事是每個開放人員應該知道的:

  1. MongoDB是一個獨立的伺服器;

    • 如MySQL或PostreSQL 一樣,MongoDB提供偵聽埠以便接入。它提供了用於查詢,建立,更新和刪除的工具。從理論上講,你使用它的工作方式相同:連線,執行任務並關閉連線
  2. 它是基於文件的,而不是基於表格的;

    • MongoDB 沒有結構化語言。如果你想建立一個新的文件型別,你不用做任何事來告訴資料庫關於這些資料的結構,而僅僅是存到資料庫中即可。

    • 簡單的說,MongoDB使用類似

      JavaScriptPHP 的型別處理方式。也就是說,資料庫是靈活的弱型別。

    • 雖然有一些資料是有限制條件的(大塊的資料可能需要一些明確的處理),但在大多數情況下,你可以像寫PHP程式碼一樣編寫你的MongoDB程式碼。

  3. 它是非結構化的;

    • 還記得這些你寫的資料庫抽象層嗎?還記得那些你處理過的ORM層嗎?現在,你可以將它們全部丟棄。在MongoDB中你不需要他們。MongoDB沒有很多查詢語句。在大多數情況下,只需給它一個數組指定你想要的資訊,然後它會給你返回文件的陣列。如果你想執行一些非常複雜的查詢(如Map-Reduce操作),可以向MongoDB傳遞JavaScript,其內部的JavaScript引擎可以解析這個指令碼
  4. 不必去學習另一種查詢語言;

    • 開發時間也短,因為沒有結構需要管理和很少(如果有的話)的資料對映。

    • 學習曲線很平滑,因為沒有新的查詢語言學習。程式碼是簡潔的。畢竟,無須任何其他ORM,封裝可以非常簡單。你的程式碼是未來的保證。向你的物件增加更多的欄位是很輕鬆的。因此,需求變化了,你可以很快修改程式碼以便適應。

    • MongoDB足以讓我意識到它有改變遊戲規則的潛力。這也是讓大家主張使用新一代的文件資料庫代替基於SQL的關係資料庫的原因。將關係資料庫留在塵土裡,更可能的是讓它們做它們能做好的事情:儲存屬於行和表的資料。

    • MongoDB 是用C++開發的面向文件的資料庫,也就是反傳統的資料庫正規化來設計的,把相關的物件都記錄到一個文件裡,每個文件內是schema-free的,也就是列名可以自由定義,比較靈活,特別是面對業務邏輯多變的應用場景十分給力。資料以BSON(類似JSON)的格式二進位制儲存。不好的地方就是可能帶來一定的資料冗餘和儲存開銷。

    • 另外,MongoDB的索引機制和MySQL等資料庫是一樣的,可以利用傳統的關係資料庫的經驗來使用MongoDB的索引。

    • 不像其他很多NoSQL產品由個別工程師根據應用場景開發出來的,MongoDB是有一個專門的公司 10gen 來維護。有一點要注意的是,MongoDB自己是不管理記憶體的,無法指定記憶體大小,完全交給作業系統來管理,因此有時候是不可控的,在生產環境使用必須在OS層面監控記憶體使用情況。

  5. 它具有強大的主流開發語言支援,如C#、C++、Java、PHP、Perl、Python、Ruby。

環境安裝

MongoDB的安裝

到這裡mongodb就已經安裝成功了。

  • 建立儲存資料的資料夾 
    如下圖,在D盤下建立一個用於裝資料的data資料夾。 

  • 指定資料儲存路徑並啟動服務

    • 在cmd下進入剛剛mongoDB安裝的路徑,如下圖: 
    • 啟動服務 
      執行指令:mongod –dbpath D:\data,其中D:\data為資料存放的位置。如下圖這啟動成功。 
    • 驗證服務是否已經啟動 
      在瀏覽器下開啟:http://localhost:27017/,如果出現下圖效果則說明服務已經啟動成功: 

MongoVUE安裝

  • 下載MongoVUE 
    個人網盤下載 
    下載解壓後效果如下: 

  • 安裝 
    如下圖: 

    不多做解釋,到此MongoVUE已經安裝完成.

  • 破解 
    將解壓zip下“破解補丁”資料夾中的“MongoVUE.exe”檔案替換到安裝檔案目錄下,如下圖: 
     
    替換到 
     
    到此,破解已經完成。

建立連線

  • 先開啟MongoVUE,按如下圖流程 

基礎操作

建立表

  • 右鍵資料庫,點選add Collection,如下圖: 

新增資料

  • 選擇剛剛新增的表,右鍵,選擇Insert/Import Documents,如下圖: 

    檢視log日誌 

    db.Test.insert({
        Name:"張三",
        Age:23,
        Sex:"男",
        Add:"XXX市XXX號XXX街道XXX號"
    });
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

查詢

  • 如下圖,最基礎的查詢: 

    • 基本查詢,在{find}中輸入Json 
      如:{Name:”張三”} 
      db.Test.find({ "Name" : "張三" }).limit(50);
      db.Test.find({ "Name" : "張三" }).limit(50).explain();
      • 1
      • 2
      • 1
      • 2

日期查詢

  • 需要通過ISODate函式將日期進行格式話,如:{“InsertDate”:ISODate(“2016-03-09T16:00:00Z”)}

    • 查詢大於,小於,大於等於,小於等於 

      db.Test.find({ "Age" : { "$gt" : 50 } }).limit(50);
      db.Test.find({ "Age" : { "$gt" : 50 } }).limit(50).explain();
      • 1
      • 2
      • 1
      • 2
      \$lt:小於
      \$lte:小於等於
      \$gt:大於
      \$gte:大於等於
      
    • 右擊表格,點選Find2,比Find多了一個where;寫表示式,如下圖: 

      db.Test.find({ "$where" : "this.Age==23 || this.Age==50" }).limit(50);
      db.Test.find({ "$where" : "this.Age==23 || this.Age==50" }).limit(50).explain();
      • 1
      • 2
      • 1
      • 2

排序${Sort}

  • 如下圖,在${Sort}中輸入Json:{Age:-1},即對Age欄位進行排序: 
     
    注:當大於0的時候為升序,小於0的時候則為降序 

    db.Test.find({ "$where" : "this.Age==23 || this.Age==50" }).limit(50).sort({ "Age" : -1 }); 
    db.Test.find({ "$where" : "this.Age==23 || this.Age==50" }).limit(50).sort({ "Age" : -1 }).explain(); 

查詢欄位${Fields}

  • 如下圖,查詢_id和這些個欄位{Name:1,Age:1} 

    db.Test.find({ "$where" : "this.Age==23 || this.Age==50" }, { "Name" : 1, "Age" : 1 }).limit(50).sort({ "Age" : -1 });
    db.Test.find({ "$where" : "this.Age==23 || this.Age==50" }, { "Name" : 1, "Age" : 1 }).limit(50).sort({ "Age" : -1 }).explain();
    • 1
    • 2
    • 1
    • 2

    注:當等於1的時候,就是查詢_id和和等於1的欄位;當如果等於0時,就是查詢除了等於0的欄位之外的所有欄位,如下圖:

    db.Test.find({ "$where" : "this.Age==23 || this.Age==50" }, { "Name" : 0, "Age" : 0 }).limit(50).sort({ "Age" : -1 });
    db.Test.find({ "$where" : "this.Age==23 || this.Age==50" }, { "Name" : 0, "Age" : 0 }).limit(50).sort({ "Age" : -1 }).explain();
    • 1
    • 2
    • 1
    • 2

skip跳過

  • 當skip>0的時候表示跳過多少行,比如skip=1,表一起有2條資料,那麼就只會查詢出第二條資料。

Limit分頁

  • 表示每次查詢多少行,0的時候標識查詢所有,>0則查詢指定的行數。

修改

  • 右鍵表,選中update 

    db.Test.update({ "Age" : 24, "$isolated" : "true" },{$set:{Age:27,}});
    db.Test.find({Age:24});
    • 1
    • 2
    • 1
    • 2

刪除資料

  • 右鍵表,選中remove,在視窗中輸入如下json即可完成刪除 

    db.Test.remove({ "Age" : 26 });
    • 1
    • 1

Over,後續有進一步研究,持續完善…