臨時需要使用python來操作mongoDB, 網上搜尋發現很多文檔都已經非常陳舊了, 並不符合目前3.0版本的安裝配置, 特此自己整理一下, 以作備忘.
MongoDB簡介
MongoDB(http://www.mongodb.org/)是一個高效能,開源(代震軍大牛正在研究MongoDB的源碼,大家可以去看看http://www.cnblogs.com/daizhj/),模式自由(schema-free)的文檔型資料庫,它在許多情境下可用於替代傳統的關係型資料庫或鍵/值(key-value)儲存方式。MongoDB使用C++開發,
具有以下特性:
面向集合的儲存:適合儲存物件及JSON形式的資料。
動態查詢:MongoDB支援豐富的查詢運算式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
完整的索引支援:包括文檔內嵌對象及數組。MongoDB的查詢最佳化工具會分析查詢運算式,並產生一個高效的查詢計劃。
查詢監視:MongoDB包含一個監視工具用於分析資料庫操作的效能。
複製及自動容錯移轉:MongoDB資料庫支援伺服器之間的資料複製,支援主-從模式及伺服器之間的相互複製。複製的主要目標是提供冗餘及自動容錯移轉。
高效的傳統儲存方式:支援位元據及大型物件(如照片或圖片)。
自動分區以支援雲層級的伸縮性(處於早期alpha階段):自動分區功能支援水平的資料庫叢集,可動態添加額外的機器。
模式自由(schema-free),意味著對於儲存在MongoDB資料庫中的檔案,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的檔案儲存體在同一個資料庫裡。
支援Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++語言的驅動程式,社區中也提供了對Erlang及.NET等平台的驅動程式。
使用場合:
網站資料:MongoDB非常適合即時的插入,更新與查詢,並具備網站即時資料儲存所需的複製及高度伸縮性。
緩衝:由於效能很高,MongoDB也適合作為資訊基礎設施的緩衝層。在系統重啟之後,由MongoDB搭建的持久化緩衝層可以避免下層的資料來源過載。
大尺寸,低價值的資料:使用傳統的關係型資料庫儲存一些資料時可能會比較昂貴,在此之前,很多時候程式員往往會選擇傳統的檔案進行儲存。
高伸縮性的情境:MongoDB非常適合由數十或數百台伺服器組成的資料庫。MongoDB的路線圖中已經包含對MapReduce引擎的內建支援。
用於對象及JSON資料的儲存:MongoDB的BSON資料格式非常適合文檔化格式的儲存及查詢。
所謂“面向集合”(Collenction-Orented),意思是資料被分組儲存在資料集中,被稱為一個集合(Collenction)。每個集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文檔。集合的概念類似關係型資料庫(RDBMS)裡的表(table),不同的是它不需要定義任何模式(schema)。
下面按照MongoDB官網的提示來採用.deb包的方式安裝MongoDB,雖然Ubuntu 14.04在自己的repository中包含了它自己的MongoDB包, 但是我們採用官方.deb包的方式安裝通常會更新.這個deb包中包含如下packages:
mongodb-org metapackage, 會自動安裝下面的4個components packages
mongodb-org-server mongod daemon和相關的配置,初始化指令碼,其中/etc/init.d/mongod可用來stop, start, and restart daemon processes
mongodb-org-mongos mongos daemon
mongodb-org-shell mongo shell
mongodb-org-tools MongoDB tools: mongoimport bsondump, mongodump, mongoexport, mongofiles, mongooplog, mongoperf, mongorestore, mongostat, and mongotop.
說明:
/var/lib/mongodb 存放data檔案
/var/log/mongodb 存放記錄檔
/etc/mongod.conf 設定檔
使用MongoDB的user account來運行它. 如若更改user,需要確保它對上面這兩個檔案的存取權限
安裝MongoDB
1.命令列匯入MongoDB public GPG Key:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
2.產生MongoDB列表檔案
echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
3.重載當地套件資料庫
sudo apt-get update
4.安裝最新穩定版MongoDB包
sudo apt-get install -y mongodb-org
5.確認當前安裝的MongoDB版本
echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-org-shell hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections
6.啟動/停止/重啟MongoDB
sudo service mongod start
sudo service mongod stop
sudo service mongod restart
查看狀態
sudo service mongod status
7.查看日誌檢查MongoDB是否成功啟動
檢查記錄檔/var/log/mongodb/mongod.log中是否有
[initandlisten] waiting for connections on port <port>
port預設為27017, 它在/etc/mongod.conf中配置
至此, MongoDB已經成功安裝, 下面開始使用它. mongod守護進程是database server, mongo shell可用視為client,我們通過它去與MongoDB互動.
8.串連mongod
mongo
在Ubuntu終端中輸入mongo, 它會預設尋找在localhost的27017連接埠上偵聽的database server, 如果不是這樣,可用使用--port和--host選項.使用exit來退出mongo環境.
9.選擇一個資料庫
當mongo串連上mongod後,它會預設使用test資料庫, 使用下面的operation來擷取相關資訊:
help 顯示協助資訊
db 查看當前串連的資料庫
show dbs 顯示所有資料庫列表
use mydb 切換到mydb資料庫
注意:對一個新命名的資料庫, MongoDB並不會立即被建立, 在show dbs中查看不了,除非你insert data into it
10.產生collection和插入documents
db
查看當前存在的資料庫, 要建立一個新的資料庫,使用下面的命令:
use mydb
使用js操作來產生兩個documents
j = { name : "mongo" }
k = { x : 3 }
將j,k插入testData collection中, 注意MongoDB使用dynamic schemas,在插入資料之前不需要事先聲明testData, 在用到它時會自動產生.
db.testData.insert( j )
db.testData.insert( k )
當插入第一個document時, mydb資料庫和testData集合都會自動產生.
11.驗證testData collection是否存在
show collections
驗證testData中是否存在documents
db.testData.find()
將會返回
{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
12.退出mongo shell
exit
或者直接按Ctrl+C中斷退出
13.設定其他用戶端串連
預設安裝的話, 只允許127.0.0.1的IP串連, 需要修改/etc/mongodb.conf,
sudo vim /etc/mongodb.conf
注釋掉記錄
#bind_ip = 127.0.0.1
參考文獻
[1].http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
[2].http://docs.mongodb.org/manual/tutorial/getting-started/
[3].http://www.cnblogs.com/xiaogangqq123/archive/2011/05/16/2029426.html