MongoDB數(shù)據(jù)庫(kù)
簡(jiǎn)介:
MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的 NoSQL 數(shù)據(jù)庫(kù)走孽。在處理海量數(shù)據(jù)的時(shí)候會(huì)比 MySQL 更有優(yōu)
勢(shì)。爬蟲如果上了一個(gè)量級(jí),可能就會(huì)比較推薦使用 MongoDB 够话,當(dāng)然沒有上量的數(shù)據(jù)也完全可以
使用 MongoDB 來存儲(chǔ)數(shù)據(jù)滨砍。因此學(xué)會(huì)使用 MongoDB 也是爬蟲開發(fā)工程師必須掌握的一個(gè)技能杯瞻。
Windows 下安裝 MongoDB 數(shù)據(jù)庫(kù):
在官網(wǎng)下載 MongoDB 數(shù)據(jù)庫(kù)柑爸。是一個(gè) msi 文件让腹。官網(wǎng)地址 如下:https://www.mongodb.com/download-center?ct=atlasheader#community
然后雙擊進(jìn)行安裝:
運(yùn)行 MongoDB :
1. 創(chuàng)建數(shù)據(jù)目錄: 啟動(dòng) MongoDB 之前肾砂,首先要給他指定一個(gè)數(shù)據(jù)存儲(chǔ)的路徑列赎。比如我
在 MongoDB 的安裝路徑下創(chuàng)建一個(gè) data 文件夾,專門用來存儲(chǔ)數(shù)據(jù)
的镐确。 D:\ProgramApp\mongodb\data 包吝。
2. 把 mongodb 的 bin 目錄加入到環(huán)境變量中。方便后期調(diào)用源葫。
3. 執(zhí)行命令 mongod --dbpath D:\ProgramApp\mongodb\data 啟動(dòng)诗越。
連接 MongoDB :
在環(huán)境變量設(shè)置好的前提下,使用以下命令 mongo 就可以進(jìn)入到 mongo 的操作終端了息堂。
使用 Compass 軟件連接 MongoDB :
Compass 是一個(gè)圖形化的操作 MongoDB 的客戶端嚷狞。使用他來操作會(huì)更加方便。
將 MongoDB 制作成 windows 服務(wù):
啟動(dòng) mongodb 后荣堰,如果想讓 mongodb 一直運(yùn)行床未,那么這個(gè)終端便不能關(guān)閉,而且每次運(yùn)行的時(shí)候
還需要指定 data 的路徑振坚。因此我們可以將 mongodb 制作成一個(gè)服務(wù)薇搁,以后就通過一行命令就可
以運(yùn)行了。以下將講解如何制作服務(wù)
- 創(chuàng)建配置文件:在 mongodb 安裝的路徑下創(chuàng)建配置文件 mongod.cfg (路徑和名字不是必須和
我這的一樣)渡八,然后在配置文件中添加以下代碼:
logpath=D:\ProgramApp\mongodb\data\log\mongod.log
dbpath=D:\ProgramApp\mongodb\data\db
logpath 是日志的路徑啃洋。 dbpath 是 mongodb 數(shù)據(jù)庫(kù)的存儲(chǔ)路徑传货。
- 安裝 mongodb 服務(wù):
使用以下命令即可將 mongodb 安裝成一個(gè)服務(wù):
mongod --config "cfg配置文件所在路徑" --install
比如:
mongod --config "D:\ProgramApp\mongodb\mongod.cfg" --instal
-
啟動(dòng) mongodb :
net start mongodb
-
關(guān)閉 mongodb :
net stop mongodb
-
移除 mongodb :
"D:\ProgramApp\mongodb\bin\mongod.exe" --remove
MongoDB 概念介紹:
SQL術(shù)語/概念 | MongoDB術(shù)語/概念 | 解釋/說明 |
---|---|---|
database | database | 數(shù)據(jù)庫(kù) |
table | collection | 數(shù)據(jù)庫(kù)表/集合 |
row | document | 數(shù)據(jù)記錄行/文檔 |
column | field | 數(shù)據(jù)字段/域 |
index | index | 索引 |
joins | joins | 表連接,MongoDB不支持 |
primary key | primary key | 主鍵,MongoDB自動(dòng)將_id字段設(shè)置為主鍵 |
MongoDB 三元素:
三元素:數(shù)據(jù)庫(kù)、集合宏娄、文檔问裕。
- 文檔(document):就是關(guān)系型數(shù)據(jù)庫(kù)中的一行。文檔是一個(gè)對(duì)象孵坚,由鍵值對(duì)構(gòu)成粮宛,
是 json 的擴(kuò)展形式:
{'name':'abc','gender':'1'}
- 集合(collection):就是關(guān)系型數(shù)據(jù)庫(kù)中的表∈ⅲ可以存儲(chǔ)多個(gè)文檔窟勃,結(jié)構(gòu)可以不固定。如可
以存儲(chǔ)如下文檔在一個(gè)集合中:
{"name":"abc","gender":"1"}
{"name":"xxx","age":18}
{"title":'yyy','price':20.9}
MongoDB基本操作命令:
db :查看當(dāng)前的數(shù)據(jù)庫(kù)逗堵。
show dbs :查看所有的數(shù)據(jù)庫(kù)秉氧。
use 數(shù)據(jù)庫(kù)名 :切換數(shù)據(jù)庫(kù)。如果數(shù)據(jù)庫(kù)不存在蜒秤,則創(chuàng)建一個(gè)汁咏。(創(chuàng)建完成后需要插入數(shù)據(jù)
庫(kù)才算創(chuàng)建成功)
db.dropDatabase() :刪除當(dāng)前指向的數(shù)據(jù)庫(kù)。
db.集合名.insert(value) :添加數(shù)據(jù)到指定的集合中作媚。
db.集合名.find() :從指定的集合中查找數(shù)據(jù)攘滩。
更多命令請(qǐng) 見:http://www.runoob.com/mongodb/mongodb-tutorial.html
Python操作 MongoDB :
數(shù)據(jù)類型:
類型 | 說明 |
---|---|
Object ID | 文檔ID |
String | 字符串,最常用纸泡,必須是有效的UTF-8 |
Boolean | 存儲(chǔ)一個(gè)布爾值漂问,true或false |
Integer | 整數(shù)可以是32位或64位,這取決于服務(wù)器 |
Double | 存儲(chǔ)浮點(diǎn)值 |
Arrays | 數(shù)組或列表女揭,多個(gè)值存儲(chǔ)到一個(gè)鍵 |
Object | 用于嵌入式的文檔蚤假,即一個(gè)值為一個(gè)文檔 |
Null | 存儲(chǔ)Null值 |
Timestamp | 時(shí)間戳,表示從1970-1-1到現(xiàn)在的總秒數(shù) |
Date | 存儲(chǔ)當(dāng)前日期或時(shí)間的UNIX時(shí)間格式 |
安裝 pymongo :
要用 python 操作 mongodb 吧兔,必須下載一個(gè)驅(qū)動(dòng)程序磷仰,這個(gè)驅(qū)動(dòng)程序就是 pymongo :
pip install pymongo
連接 MongoDB :
import pymongo
# 獲取連接的對(duì)象
client = pymongo.MongoClient('127.0.0.1',port=27017)
# 獲取數(shù)據(jù)庫(kù)
db = client.zhihu
# 獲取集合(表)
collection = db.qa
# 插入一條數(shù)據(jù)到集合中
collection.insert_one({
"username":"abc",
"password":'hello'
})
操作 MongoDB 的主要方法如下:
-
insert_one :加入一條文檔數(shù)據(jù)到集合中。示例代碼如下:
collection.insert_one({ "username":"abc", "password":'hello' })
- insert_many :加入多條文檔數(shù)據(jù)到集合中境蔼。
collection.insert_many([
{
"username":'abc',
'password':'111111'
},
{
"username":'bbb',
'password':'222222'
},
])
- find_one :查找一條文檔對(duì)象灶平。
result = collection.find_one()
print(result)
# 或者是指定條件
result = collection.find_one({"username":"abc"})
print(result)
- update_one :更新一條文檔對(duì)象。
collection.update_one({"username":"abc"},{"$set":{"username":"aaa"}})
- update_many :更新多條文檔對(duì)象箍土。
collection.update_many({"username":"abc"},{"$set":{"username":"aaa"}})
- delete_one :刪除一條文檔對(duì)象逢享。
collection.delete_one({"username":"abc"})
- delete_many :刪除多條文檔對(duì)象。
collection.delete_many({"username":"abc"})