mongodb數據庫基本操作


0.目標

熟悉命令行中對MongoDB的一些基本操作,為接下來Node.js操作MongoDB做准備。

如果你曾經學習或接觸過關系型數據庫(如MySQL、SQLServer等),那么在閱讀此文時,可自行做以下對應:

Table(表) -> Collection(集合)

Log(記錄) -> Document(文檔)

當然,這種對應並不確切,因為Table(表)的結構是固定的,而Collection(集合)則不然;Log(記錄)的“行”,而Document(文檔)的結構則更多樣化。不過對初學者而言,這樣的比喻可以更快地上手;事實上,文檔型數據庫MongoDB的結構、操作也確實和關系型數據庫(如MySQL)很像。

如果你從未學習過數據庫,那么建議你先看看開篇文章介紹的書《MongoDB權威指南》,以及本文的參考書籍《NoSQL數據庫技術實戰》,先對非關系型數據庫這個概念有一個理解后,再來看本文。

如果你已經學習過MongoDB等非關系型數據庫,那么本文權當復習,如有錯誤,歡迎指正。如果你已經是大神,那么更加歡迎你的指導。

歡迎閱讀MongoDB相關文章:

MongoDB基礎0——MongoDB的安裝與可視化管理工具

MongoDB基礎0——MongoDB的安裝與可視化管理工具

MongoDB基礎1——數據庫基本操作

MongoDB基礎2——Mongoose的操作指南

MongoDB基礎3——Mongoose的數據交互問題

MongoDB基礎X——踩過的坑以及解決方案(持續更新中)

 


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基礎的操作就這么多了,還有一些更高級的操作,將在后續文章中列出




鏈接:https://www.jianshu.com/p/8bf26effa737


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM