MongoDB基礎資料庫基本操作教程

來源:互聯網
上載者:User

0.目標
熟悉命令列中對MongoDB的一些基本操作,為接下來Node.js操作MongoDB做準備。
如果你曾經學習或接觸過關係型資料庫(如MySQL、SQLServer等),那麼在閱讀此文時,可自行做以下對應:
Table(表) -> Collection(集合)
Log(記錄) -> Document(文檔)
當然,這種對應並不確切,因為Table(表)的結構是固定的,而Collection(集合)則不然;Log(記錄)的“行”,而Document(文檔)的結構則更多樣化。不過對初學者而言,這樣的比喻可以更快地上手;事實上,文檔型資料庫MongoDB的結構、操作也確實和關係型資料庫(如MySQL)很像。
如果你從未學習過資料庫,那麼建議你先看看開篇文章介紹的書《MongoDB權威指南》,以及本文的參考書籍《NoSQL資料庫技術實戰》,先對非關係型資料庫這個概念有一個理解後,再來看本文。
如果你已經學習過MongoDB等非關係型資料庫,那麼本文權當複習,如有錯誤,歡迎指正。如果你已經是大神,那麼更加歡迎你的指導。
1.串連資料庫
串連資料庫之前,請先確認是否已經開啟MongoDB服務。具體方法請參考上一節說明。
在mongodb所在目錄下開啟命令列,進入mongodb\bin,輸入命令 mongo
 代碼如下 複製代碼
C:\mongodb\bin>mongo

進入MongoDB
2.切換資料庫
預設shell串連的是原生localhost的test庫,在上面圖片中可以看出,當前正在使用的資料庫(connecting to:)是“test”
如果要切換資料庫,可以輸入下面命令
 代碼如下 複製代碼
use mydb
上面的mydb即要切換的資料庫名稱
3.插入一條記錄
切換到資料庫myfirstdb中
 代碼如下 複製代碼
use myfirstdb

切換資料庫
建立對象a,b,並分別儲存
 代碼如下 複製代碼
// 建立對象a,b
a = {name : "user1"};
b = {name : "user2"};
// 儲存對象a,b
db.user.save(a);
db.user.save(b);

執行結果
用視覺化檢視查看結果

MongoCola查看結果
注意到,我們在這之前根本沒有建立過名叫myfirstdb的資料庫,也沒有建立過名叫user的集合,但為什麼命令依然能夠執行、並且得到我們預期的結果?這是因為MongoDB作為 文檔型資料庫,它是無表結構的資料庫,它不需要預先定義表結構。
正是這個特性,MongoDB擁有比關係型資料庫更快的處理速度;另外,它還減少了添加欄位等表結構變更所需要的開銷。這樣,我們就不必再去關心表結構和程式之間的一致性問題;簡單來說,就是你在程式中添加一個欄位時,不必考慮資料庫是否有這個欄位,因為MongoDB會自動為你建立。
4.插入一條複雜一點的記錄
 代碼如下 複製代碼
c = {name : "user2", card:"KK8566"};
db.user.save(c);
在這裡,我們增加了一個欄位”card”,這在之前是不存在的,那麼執行情況如何呢?
先看控制台
再看可視化管理工具

MongoCola查看結果
已經自動產生了一個card欄位。
5.修改記錄
上一個例子中,我們看到有兩個”user2”,我們現在要把最後一個改為”user3”
 代碼如下 複製代碼
db.user.update( {name:"user2", card:"KK8566"}, {$set:{name:"user3", card:"KK8566"} } );
修改結果:

修改結果

MongoCola查看結果
6.刪除記錄
我們刪除第一個文檔
 代碼如下 複製代碼
db.user.remove( {name : "user1" } )

刪除

MongoCola查看結果
7. 查詢記錄
列出所有記錄
 代碼如下 複製代碼
db.user.find();
可以看到,在上一小節我們執行的刪除命令,資料庫裡僅剩兩個文檔。
使用while來輸出
 代碼如下 複製代碼
var cursor = db.user.find();
while(cursor.hasNext()) printjson( cursor.next());
 

通過while來批量輸出
轉為數組
 代碼如下 複製代碼
var arr = db.user.find().toArray();
arr[1]; // 顯示第1個

數組
事實上,我們在Node.js的伺服器端操作MongoDB時,也是使用類似的方式。
8.條件查詢
用MongoDB查詢語句來實現MySQL的條件查詢語句:SELECT * FROM user WHERE NAME=”user3”
 代碼如下 複製代碼
db.user.find( { name : "user3" } ).forEach( printjson);

條件查詢
上面的命令將會返回所有滿足條件的文檔,為了節省開銷,還可以使用findOne()來得到滿足條件的第一個文檔:
 代碼如下 複製代碼
db.user.findOne( { name : "user3" } );
注意,這裡僅僅是一個簡單的條件限制。我們在實際應用中,會有很多很複雜的需求;在MySQL中,我們會使用多個AND或OR來表示與和或的關係。在MongoDB中,也有類似AND或OR的關鍵字,但MongoDB中,一切都是用類似Json的格式來表達的。具體操作我會在後續文章中做詳細介紹,歡迎閱讀。
 代碼如下 複製代碼
9.限制結果集數量
在查詢語句後面加上limit(num)即可
 代碼如下 複製代碼
db.user.find().limit(3); // 限制為3個文檔

至此,MongoDB基礎的操作就這麼多了,還有一些更進階的操作,將在後續文章中列出

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.