Python網絡爬蟲(十三)——MongoDB

簡介

MongoDB 是一個基於分佈式文件存儲的數據庫。由 C++ 語言編寫。旨在爲 WEB 應用提供可擴展的高性能數據存儲解決方案。

MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。

MongoDB

啓動 MongoDB

MongoDB 安裝之後需要驗證 MongoDB 服務,可以選擇到 MongoDB 安裝目錄下的 bin 目錄執行:

mongod --dbpath D:\MongoDB\data

上邊的命令將會啓動 bin 目錄下的 MongoDB 服務端,而後邊跟的路徑則是 data 目錄(不存在的話可以手動建立)。

運行 MongoDB

上邊只是啓動了 MongoDB 服務端,如果要使用 MongoDB 的服務,則還需要啓動 MongoDB 的客戶端:

  • 添加數據目錄:在 MongoDB 的安裝目錄中添加 data 目錄
  • 添加環境變量:爲了避免每次執行 MongoDB 的命令都要定位到 bin 目錄中,可以將 bin 目錄添加到環境變量中
  • 執行命令:在啓動 MongoDB 服務段之後(管理員啓動),保持終端不要關閉,然後在新的終端(管理員啓動)中執行:
mongo

此時就啓動了 MongoDB 的客戶端,也就可以通過終端來操縱數據庫。

Compass

和 MySQL 相似,同樣也可以使用 GUI 來進行數據庫操作,官方提供的 GUI 是 Compass,使用 GUI 的操作就簡單很多了。想要了解的話可以自行下載安裝使用。

將 MongoDB 製作爲 Windows 服務

啓動 MongoDB 之後,如果需要一直使用 MongoDB 的服務,該終端就不能關閉,而且在啓動的時候需要指定 data 的路徑,這是有點麻煩的。而通過將之製作成 Windows 服務就能夠有效避免該問題。步驟爲:

  • 創建配置文件:在 mongodb 的安裝路徑下創建配置文件 configure.cfg,內容爲:
logpath=D:\MongoDB\log\mongod.log
dbpath=D:\MongoDB\data

logpath 對應的是日誌路徑,dbpath 對應的是數據庫路徑。

  • 安裝 MongoDB 服務:執行命令:
mongod --config "D:\MongoDB\configure.cfg" --install
  • 啓動 MongoDB:
net start mongodb
  • 關閉 MongoDB:
net stop mongodb
  • 移除 MongoDB:
"D:\MongoDB\bin\mongod.exe" --remove

MongoDB 概念

SQL MongoDB 描述
database database 數據庫
table collection 數據庫表/集合
row document 數據記錄行/文檔
column field 數據字段/域
index index 索引
table joins 表連接/MongoDB 不支持
primary key primary key

主鍵/MongoDB 自動將 _id 字段設置爲主鍵

MongoDB 元素

主要包括 database,collection,document:

  • document:相當於關係型數據庫中的一行。document 是一個對象,由鍵值對構成,類似於字典,是 json 的擴展形式:
{“name”:"zhangsan","num":"100"}
  • collection:相當於關係型數據庫中的表。能夠存儲多個文檔,結構可以不固定
{“name”:"zhangsan","num":"100"}
{“name”:"lisi","age":"20"}
{“name”:"wangwu","sex":"x"}

MongoDB 指令

指令 描述
db 查看當前數據庫
show dbs 查看所有數據庫
use databasename 切換數據庫,如果數據庫不存在,則進行創建(創建完成後需要插入數據纔算做創建成功)
db.dropDatabase() 刪除當前指向的數據庫
db.collectionname.insert(value) 添加數據到指定 collection
db.collectionname.find() 從指定 collection 中查找數據

pymongo

連接 MongoDB

import pymongo

# 連接 MongoDB 服務,事先需要啓動 MongoDB 服務
mongo = pymongo.MongoClient('127.0.0.1',port=27017)
print(type(mongo))
# 獲得 test 數據庫,沒有則創建
db = mongo.test
# 獲得 sheet1 collection
collection = db.sheet1
# 插入數據
collection.insert_one({"username":"zhangsan","num":"100"})

結果爲:

<class 'pymongo.mongo_client.MongoClient'>

通過上邊的數據,可以將輸入插入到 test 數據庫中的 sheet1 collection 中,最後的結果可以在終端或者 Compass 中查看。

數據類型

類型 描述
ObjectID 文檔 ID
String 字符串(有效的 utf-8)
Boolean 布爾值
Integer 整數型
Double 浮點型
Arrays 數據或列表,多個值存儲到一個鍵
Object 嵌入式文檔,此時的一個值就是一個文檔
Null Null
Timestamp 時間戳,表示從 1997/1/1 至今的總秒數
Date 存儲當前日期或時間的 UNIX 時間格式

常用函數

insert_one

加入一條 document 到 collection 中。

insert_many

加入多條 document 到 collection 中。

find_one

查找一條 document。

find

查找所有 document。

update_one

更新一條 document。

updata_many

更新多條 document。

delete_one

刪除一條 document。

delete_many

刪除多條 document。

import pymongo

mongo = pymongo.MongoClient('127.0.0.1',port=27017)
db = mongo.test
collection = db.sheet1

result = collection.find()
for item in result:
    print(item)
print('********************************')

collection.insert_one({"username":"zhangsan","num":"100"})
print(collection.find_one({"num":"100"}))
print('********************************')

collection.insert_many(
    [
        {"username": "lisi", "num": "101"},
        {"username":"wangwu","num":"102"},
        {"username":"zhaoliu","num":"103"}
    ])
result = collection.find()
for item in result:
    print(item)
print('********************************')

collection.update_many({"username":"zhangsan"},{"$set":{"username":"zhangjie"}})
result = collection.find()
for item in result:
    print(item)
print('********************************')

collection.delete_many({"username": "zhangjie"})
result = collection.find()
for item in result:
    print(item)

結果爲:

********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c94'), 'username': 'zhangsan', 'num': '100'}
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c94'), 'username': 'zhangsan', 'num': '100'}
{'_id': ObjectId('5ec92d4fb19033c10e141c95'), 'username': 'lisi', 'num': '101'}
{'_id': ObjectId('5ec92d4fb19033c10e141c96'), 'username': 'wangwu', 'num': '102'}
{'_id': ObjectId('5ec92d4fb19033c10e141c97'), 'username': 'zhaoliu', 'num': '103'}
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c94'), 'username': 'zhangjie', 'num': '100'}
{'_id': ObjectId('5ec92d4fb19033c10e141c95'), 'username': 'lisi', 'num': '101'}
{'_id': ObjectId('5ec92d4fb19033c10e141c96'), 'username': 'wangwu', 'num': '102'}
{'_id': ObjectId('5ec92d4fb19033c10e141c97'), 'username': 'zhaoliu', 'num': '103'}
********************************
{'_id': ObjectId('5ec92d4fb19033c10e141c95'), 'username': 'lisi', 'num': '101'}
{'_id': ObjectId('5ec92d4fb19033c10e141c96'), 'username': 'wangwu', 'num': '102'}
{'_id': ObjectId('5ec92d4fb19033c10e141c97'), 'username': 'zhaoliu', 'num': '103'}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章