MongoDB 數(shù)據(jù)庫的簡單使用和配置
這節(jié)課我們主要是學習 MongoDB 數(shù)據(jù)庫的基本操作和使用,爬蟲在爬取到數(shù)據(jù)之后可以把數(shù)據(jù)需要把數(shù)據(jù)保留下來供其他工作人員去使用。如果數(shù)據(jù)量不是很大的話可以保存在文件中,但是如果數(shù)據(jù)量很大那么保存在文件中就非常困難,先不說存儲完數(shù)據(jù)之后的文件大小非常大,很占空間,單就是往文件中寫入數(shù)據(jù)的速度就很慢。
但是幸好我們還有另外一個選擇,那就是將爬取到的數(shù)據(jù)存入數(shù)據(jù)庫中。因為現(xiàn)在 JSON 數(shù)據(jù)格式的流行,我們一般都會選擇 JSON 來作為數(shù)據(jù)的傳輸格式,所以非常適合 JSON 數(shù)據(jù)存儲的 MongoDB 數(shù)據(jù)庫就獲得了我們爬蟲程序員的青睞,所以這節(jié)課我們就來學習下 MongoDB 的:
- MongoDB 基本概念;
- MongogDB 主要特點;
- MongoDB 常見操作;
- Python 操作 MongoDB。
通過本節(jié)課的學習你會掌握:
-
MongoDB 基本操作,能夠操作創(chuàng)建數(shù)據(jù)庫,并且進行簡單的 CURD 功能。
-
使用 Python 進行數(shù)據(jù)庫的 CURD.
1. MongoDB 簡介
MongoDB 是一個文檔型數(shù)據(jù)庫,由 C++ 編寫,功能豐富,支持復(fù)雜的數(shù)據(jù)類型,支持數(shù)據(jù)建立索引,性能高,容易使用,方便部署。
主要特點如下:
- 面向集合存儲,方便存儲對象類型的數(shù)據(jù);
- 支持語言豐富,Python,Java,C++ 等語言;
- 支持完全索引;
- 文件存儲等格式為 JSON。
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫以 MySQL 為例,一般是由數(shù)據(jù)庫,表,記錄三個層次組成,MongoDB 是由數(shù)據(jù)庫,集合,文檔對象組成。下表列出了 MongoDB 與 MySQL 的對比:
MySQL | MongoDB | 描述 |
---|---|---|
database | database | 數(shù)據(jù)庫 |
table | collection | 數(shù)據(jù)庫表 / 集合 |
row | document | 數(shù)據(jù)庫行 / 文檔 |
column | field | 數(shù)據(jù)字段列 / 域 |
index | index | 索引 |
index | index | 索引 |
2. MongoDB 數(shù)據(jù)庫的安裝
MongoDB 的安裝方式讀者可以自行去查找,這里就不再贅述了。通過以下方式測試數(shù)據(jù)庫是否安裝運行成功:打開瀏覽器,輸入如下網(wǎng)址,成功后,會返回如下結(jié)果:
下面我們來看下 MongoDB 的基本操作。
2.1 顯示所有數(shù)據(jù)庫
要查看本地所有的數(shù)據(jù)庫需要運行下面的命令:
show dbs
效果展示:
2.3 創(chuàng)建一個集合
要查看本地所有的數(shù)據(jù)庫需要運行下面的命令:
db.createCollection("test")
效果展示:
2.4 往集合添加一條數(shù)據(jù)
要查看本地所有的數(shù)據(jù)庫需要運行下面的命令:
db.test.insert({"name":"python", "version":3})
db.test.insert({"name":"java","version":1.8})
效果展示:
2.5 查詢集合添加的數(shù)據(jù)
要查看本地所有的數(shù)據(jù)庫需要運行下面的命令:
db.test.find()
效果展示:
2.6 更改集合里的數(shù)據(jù)
要查看本地所有的數(shù)據(jù)庫需要運行下面的命令:
db.test.update({"_id": ObjectId("5e6b448452df331867ae1a9f")},{$set:{"version":2}})
效果展示:
2.7 刪除集合里的數(shù)據(jù)
要查看本地所有的數(shù)據(jù)庫需要運行下面的命令:
db.test.deleteOne({"name":"java"})
效果展示:
3. 使用 pymongo 操作 MongoDB 數(shù)據(jù)庫
第二部分中我們講述了如何操作 MongoDB 數(shù)據(jù)庫,但是在爬蟲開發(fā)中我們沒辦法使用命令來操作 MongoDB 數(shù)據(jù)庫。我們就要使用 Python 語言來操作 MongoDB 數(shù)據(jù)庫,那么如何使用 Python 來操作數(shù)據(jù)庫呢?
這個時候我們就需要使用 pymongo 包了。通過這個第三方的包,我們才可以通過 Python 語言來控制 MongoDB 的操作。
首先安裝 pymongo 包:
pip install pymongo
效果展示:
3.1 連接數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫和集合
在 pymongo 安裝完成之后,我們接下來通過 Python 來連接本地和遠程的 MongoDB 數(shù)據(jù)庫。
from pymongo import MongoClient
#建立連接
client = MongoClient('mongodb://localhost:27017/')
#創(chuàng)建數(shù)據(jù)庫new_db_for_py
db = client['new_db_for_py']
#創(chuàng)建集合new_data_set
collection = db.new_data_set
效果如下:
3.2 插入數(shù)據(jù)
插入兩組數(shù)據(jù),分別為 Tony 和 Jack:
data = {"name":"Tony", "age":18, "gender":"male"}
data = {"name":"Jack", "age":30, "gender":"male"}
效果如下:
3.3 查詢數(shù)據(jù)
尋找名字為 Tony 的數(shù)據(jù):
collection.find_one({"name":"Tony"})
效果如下:
3.4 更改數(shù)據(jù)
Tony = collection.find_one(condition)
Tony['age'] = 55
collection.update(condition, Tony)
效果如下:
3.5 刪除數(shù)據(jù)
collection.remove({"name":"Tony"})
效果如下:
再次查詢 Tony,效果如下:
查詢?yōu)榭?,說明 Tony 的數(shù)據(jù)刪除成功!
4. 小結(jié)
這一小節(jié),我們學會了 MongoDB 的基本操作,以及在 Python 中的使用。
如果文件不是很大,持久化存儲可以使用 TXT 或者 CSV 格式,寫入和讀取都比較方便。但是,當數(shù)據(jù)量很大的時候,而且需要存儲 JSON 等格式的時候,推薦使用 MongoDB 進行持久化的存儲。