簡介
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'}