跟我一起從零開(kāi)始學(xué)python(六)數(shù)據(jù)庫(kù)編程:MongoDB數(shù)據(jù)庫(kù)

前言

回顧之前講了python語(yǔ)法編程 ,必修入門基礎(chǔ)和網(wǎng)絡(luò)編程,多線程/多進(jìn)程/協(xié)程等方面的內(nèi)容,昨天和今天講到了數(shù)據(jù)庫(kù)編程篇MySQL,Redis今天第三篇MongoDB篇,前面沒(méi)看的也不用往前翻,系列文已經(jīng)整理好了:

1.跟我一起從零開(kāi)始學(xué)python(一)編程語(yǔ)法必修
2.跟我一起從零開(kāi)始學(xué)python(二)網(wǎng)絡(luò)編程
3.跟我一起從零開(kāi)始學(xué)python(三)多線程/多進(jìn)程/協(xié)程
4.跟我一起從零開(kāi)始學(xué)python(四)數(shù)據(jù)庫(kù)編程:MySQL數(shù)據(jù)庫(kù)
5.跟我一起從零開(kāi)始學(xué)python(五)數(shù)據(jù)庫(kù)編程:Redis數(shù)據(jù)庫(kù)

本篇講:python數(shù)據(jù)庫(kù)編程:MongoDB數(shù)據(jù)庫(kù)

本系列文根據(jù)以下學(xué)習(xí)路線展開(kāi)講述,由于內(nèi)容較多,:

從零開(kāi)始學(xué)python到高級(jí)進(jìn)階路線圖

下章講:機(jī)器學(xué)習(xí)模塊

一丶MongoDB簡(jiǎn)單介紹

Python MongoDB是一種非關(guān)系型數(shù)據(jù)庫(kù),也被稱為NoSQL數(shù)據(jù)庫(kù)。旨在提供高性能、高可用性和可擴(kuò)展性的數(shù)據(jù)存儲(chǔ)解決方案。Python MongoDB使用JSON格式存儲(chǔ)數(shù)據(jù),這使得它非常適合處理大量非結(jié)構(gòu)化數(shù)據(jù)。

Python MongoDB的主要特點(diǎn)包括

  • 高性能:Python MongoDB使用內(nèi)存映射技術(shù),可以快速讀取和寫(xiě)入數(shù)據(jù)。

  • 高可用性:Python MongoDB支持主從復(fù)制和分片技術(shù),可以保證數(shù)據(jù)的可靠性和可用性。

  • 可擴(kuò)展性:Python MongoDB可以輕松地?cái)U(kuò)展到多個(gè)節(jié)點(diǎn),以滿足不斷增長(zhǎng)的數(shù)據(jù)需求。

  • 靈活性:Python MongoDB支持動(dòng)態(tài)模式,可以根據(jù)需要隨時(shí)更改數(shù)據(jù)結(jié)構(gòu)。

  • 易用性:Python MongoDB提供了簡(jiǎn)單易用的API,可以輕松地進(jìn)行數(shù)據(jù)操作。

Python MongoDB的安裝非常簡(jiǎn)單,只需要使用pip命令即可安裝。安裝完成后,可以使用pymongo庫(kù)來(lái)連接和操作MongoDB數(shù)據(jù)庫(kù)。

Python MongoDB的應(yīng)用場(chǎng)景非常廣泛,特別是在大數(shù)據(jù)處理和實(shí)時(shí)數(shù)據(jù)分析方面。它可以用于存儲(chǔ)日志數(shù)據(jù)、社交媒體數(shù)據(jù)、物聯(lián)網(wǎng)數(shù)據(jù)等各種類型的非結(jié)構(gòu)化數(shù)據(jù)。同時(shí),Python MongoDB也可以與其他數(shù)據(jù)存儲(chǔ)解決方案(如關(guān)系型數(shù)據(jù)庫(kù))進(jìn)行集成,以滿足不同的數(shù)據(jù)處理需求。

總之,Python MongoDB是一種高性能、高可用性和可擴(kuò)展性的數(shù)據(jù)存儲(chǔ)解決方案,可以幫助開(kāi)發(fā)人員輕松地處理大量非結(jié)構(gòu)化數(shù)據(jù)。

二丶關(guān)于database的基礎(chǔ)命令

MongoDB是一種非關(guān)系型數(shù)據(jù)庫(kù),它使用文檔存儲(chǔ)數(shù)據(jù),而不是使用表格。Python是一種流行的編程語(yǔ)言,它可以與MongoDB數(shù)據(jù)庫(kù)進(jìn)行交互。在Python中,我們可以使用PyMongo庫(kù)來(lái)連接和操作MongoDB數(shù)據(jù)庫(kù)。

在MongoDB中,我們可以使用以下基礎(chǔ)命令來(lái)管理數(shù)據(jù)庫(kù):

創(chuàng)建數(shù)據(jù)庫(kù)

在MongoDB中,我們可以使用use命令來(lái)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)。例如,要?jiǎng)?chuàng)建一個(gè)名為mydatabase的數(shù)據(jù)庫(kù),我們可以使用以下命令:

use mydatabase

如果數(shù)據(jù)庫(kù)不存在,則MongoDB將創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)。如果數(shù)據(jù)庫(kù)已經(jīng)存在,則MongoDB將返回該數(shù)據(jù)庫(kù)的引用。

顯示數(shù)據(jù)庫(kù)

要顯示MongoDB中所有的數(shù)據(jù)庫(kù),我們可以使用以下命令:

show dbs

這將列出MongoDB中所有的數(shù)據(jù)庫(kù)。

刪除數(shù)據(jù)庫(kù)

要?jiǎng)h除MongoDB中的數(shù)據(jù)庫(kù),我們可以使用以下命令:

db.dropDatabase()

這將刪除當(dāng)前選定的數(shù)據(jù)庫(kù)。

切換數(shù)據(jù)庫(kù)

要切換到MongoDB中的另一個(gè)數(shù)據(jù)庫(kù),我們可以使用以下命令:

use anotherdatabase

這將切換到名為anotherdatabase的數(shù)據(jù)庫(kù)。

顯示當(dāng)前數(shù)據(jù)庫(kù)

要顯示當(dāng)前選定的數(shù)據(jù)庫(kù),我們可以使用以下命令:

db

這將返回當(dāng)前選定的數(shù)據(jù)庫(kù)的引用。

總之,Python與MongoDB數(shù)據(jù)庫(kù)的交互非常方便,可以使用PyMongo庫(kù)來(lái)連接和操作MongoDB數(shù)據(jù)庫(kù)。在Python中,我們可以使用基礎(chǔ)命令來(lái)管理數(shù)據(jù)庫(kù),例如創(chuàng)建、顯示、刪除和切換數(shù)據(jù)庫(kù)。

三丶關(guān)于集合的基礎(chǔ)命令

Python MongoDB數(shù)據(jù)庫(kù)關(guān)于集合的基礎(chǔ)命令

在Python中使用MongoDB數(shù)據(jù)庫(kù)時(shí),集合是MongoDB中的一個(gè)重要概念。集合類似于關(guān)系型數(shù)據(jù)庫(kù)中的表,但是MongoDB是一個(gè)文檔型數(shù)據(jù)庫(kù),因此集合中存儲(chǔ)的是文檔。

以下是Python MongoDB數(shù)據(jù)庫(kù)關(guān)于集合的基礎(chǔ)命令

創(chuàng)建集合

要?jiǎng)?chuàng)建一個(gè)集合,可以使用MongoDB的db.create_collection()方法。在Python中,可以使用pymongo庫(kù)中的Collection類的insert_one()方法來(lái)創(chuàng)建集合。

import pymongo

# 連接MongoDB數(shù)據(jù)庫(kù)
client = pymongo.MongoClient("mongodb://localhost:27017/")

# 創(chuàng)建一個(gè)名為mycollection的集合
mydb = client["mydatabase"]
mycol = mydb["mycollection"]

插入文檔

要向集合中插入文檔,可以使用MongoDB的db.collection.insert()方法。在Python中,可以使用pymongo庫(kù)中的Collection類的insert_one()方法來(lái)插入文檔。

import pymongo

# 連接MongoDB數(shù)據(jù)庫(kù)
client = pymongo.MongoClient("mongodb://localhost:27017/")

# 獲取mycollection集合
mydb = client["mydatabase"]
mycol = mydb["mycollection"]

# 插入一條文檔
mydict = { "name": "John", "address": "Highway 37" }
x = mycol.insert_one(mydict)

查詢文檔

要查詢集合中的文檔,可以使用MongoDB的db.collection.find()方法。在Python中,可以使用pymongo庫(kù)中的Collection類的find()方法來(lái)查詢文檔。

import pymongo

# 連接MongoDB數(shù)據(jù)庫(kù)
client = pymongo.MongoClient("mongodb://localhost:27017/")

# 獲取mycollection集合
mydb = client["mydatabase"]
mycol = mydb["mycollection"]

# 查詢所有文檔
for x in mycol.find():
  print(x)

更新文檔

要更新集合中的文檔,可以使用MongoDB的db.collection.update()方法。在Python中,可以使用pymongo庫(kù)中的Collection類的update_one()方法來(lái)更新文檔。

import pymongo

# 連接MongoDB數(shù)據(jù)庫(kù)
client = pymongo.MongoClient("mongodb://localhost:27017/")

# 獲取mycollection集合
mydb = client["mydatabase"]
mycol = mydb["mycollection"]

# 更新一條文檔
myquery = { "address": "Highway 37" }
newvalues = { "$set": { "address": "Park Lane 38" } }
mycol.update_one(myquery, newvalues)

刪除文檔

要?jiǎng)h除集合中的文檔,可以使用MongoDB的db.collection.remove()方法。在Python中,可以使用pymongo庫(kù)中的Collection類的delete_one()方法來(lái)刪除文檔。

import pymongo

# 連接MongoDB數(shù)據(jù)庫(kù)
client = pymongo.MongoClient("mongodb://localhost:27017/")

# 獲取mycollection集合
mydb = client["mydatabase"]
mycol = mydb["mycollection"]

# 刪除一條文檔
myquery = { "address": "Park Lane 38" }
mycol.delete_one(myquery)

四丶數(shù)據(jù)類型

MongoDB數(shù)據(jù)庫(kù)支持以下數(shù)據(jù)類型

  • String(字符串):存儲(chǔ)文本數(shù)據(jù),最常用的數(shù)據(jù)類型。

  • Integer(整型):存儲(chǔ)整數(shù)。

  • Boolean(布爾型):存儲(chǔ)布爾值(true/false)。

  • Double(雙精度浮點(diǎn)型):存儲(chǔ)浮點(diǎn)數(shù)。

  • Min/Max keys(最小值/最大值):用于比較值的最小值和最大值。

  • Arrays(數(shù)組):用于存儲(chǔ)數(shù)組或列表。

  • Timestamp(時(shí)間戳):記錄文檔修改或添加的時(shí)間。

  • Object(對(duì)象):用于嵌入式文檔。

  • Null(空值):用于表示空值或不存在的字段。

  • Symbol(符號(hào)):類似于字符串,但是用于特定的上下文環(huán)境。

  • Date(日期):用于存儲(chǔ)日期和時(shí)間。

  • Object ID(對(duì)象ID):用于唯一標(biāo)識(shí)文檔。

  • Binary data(二進(jìn)制數(shù)據(jù)):用于存儲(chǔ)二進(jìn)制數(shù)據(jù),如圖片、音頻等。

  • Code(代碼):用于存儲(chǔ)JavaScript代碼。

  • Regular expression(正則表達(dá)式):用于存儲(chǔ)正則表達(dá)式。

五丶數(shù)據(jù)操作

Python中操作MongoDB數(shù)據(jù)庫(kù)的方式有多種,可以使用官方提供的pymongo庫(kù),也可以使用第三方庫(kù)mongoengine等。

以下是pymongo庫(kù)的基本數(shù)據(jù)操作:

連接數(shù)據(jù)庫(kù)

import pymongo

client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client['testdb']

插入數(shù)據(jù)

collection = db['testcollection']
data = {'name': 'Tom', 'age': 18}
collection.insert_one(data)

查詢數(shù)據(jù)

# 查詢所有數(shù)據(jù)
result = collection.find()
for item in result:
    print(item)

# 查詢指定條件的數(shù)據(jù)
result = collection.find({'name': 'Tom'})
for item in result:
    print(item)

更新數(shù)據(jù)

# 更新一條數(shù)據(jù)
collection.update_one({'name': 'Tom'}, {'$set': {'age': 20}})

# 更新多條數(shù)據(jù)
collection.update_many({'name': 'Tom'}, {'$set': {'age': 20}})

刪除數(shù)據(jù)

# 刪除一條數(shù)據(jù)
collection.delete_one({'name': 'Tom'})

# 刪除多條數(shù)據(jù)
collection.delete_many({'name': 'Tom'})

聚合操作

# 統(tǒng)計(jì)數(shù)據(jù)總數(shù)
count = collection.count_documents({})

# 按條件分組統(tǒng)計(jì)
result = collection.aggregate([
    {'$group': {'_id': '$name', 'count': {'$sum': 1}}}
])
for item in result:
    print(item)

以上是pymongo庫(kù)的基本數(shù)據(jù)操作,其他庫(kù)的操作方式也類似

六丶數(shù)據(jù)的備份與恢復(fù)

Python中備份和恢復(fù)MongoDB數(shù)據(jù)庫(kù)可以使用mongodumpmongorestore命令,也可以使用pymongo庫(kù)中的函數(shù)進(jìn)行操作。

使用mongodumpmongorestore命令備份和恢復(fù)MongoDB數(shù)據(jù)庫(kù)

備份MongoDB數(shù)據(jù)庫(kù):

mongodump --host <host> --port <port> --db <database> --out <backup_directory>

其中,<host>是MongoDB服務(wù)器的IP地址或主機(jī)名,<port>是MongoDB服務(wù)器的端口號(hào),默認(rèn)為27017,<database>是要備份的數(shù)據(jù)庫(kù)名稱,<backup_directory>是備份文件存放的目錄。

恢復(fù)MongoDB數(shù)據(jù)庫(kù):

mongorestore --host <host> --port <port> --db <database> <backup_directory>

其中,<host>、<port>、<database>和<backup_directory>的含義與備份命令相同。

使用pymongo庫(kù)備份和恢復(fù)MongoDB數(shù)據(jù)庫(kù)

備份MongoDB數(shù)據(jù)庫(kù):

import pymongo
import datetime

client = pymongo.MongoClient("<mongodb_uri>")
db = client["<database>"]
collection = db["<collection>"]

backup = collection.find()

with open("<backup_file>", "w") as f:
    for doc in backup:
        f.write(str(doc) + "\n")

其中,<mongodb_uri>是MongoDB服務(wù)器的URI,<database>和<collection>是要備份的數(shù)據(jù)庫(kù)和集合名稱,<backup_file>是備份文件的路徑。

恢復(fù)MongoDB數(shù)據(jù)庫(kù):

import pymongo

client = pymongo.MongoClient("<mongodb_uri>")
db = client["<database>"]
collection = db["<collection>"]

with open("<backup_file>", "r") as f:
    for line in f:
        doc = eval(line.strip())
        collection.insert_one(doc)

其中,<mongodb_uri>、<database>、<collection>和<backup_file>的含義與備份命令相同。注意,這種方法只適用于備份和恢復(fù)小型數(shù)據(jù)庫(kù),對(duì)于大型數(shù)據(jù)庫(kù),建議使用mongodumpmongorestore命令進(jìn)行操作。

七丶聚合操作

MongoDB的聚合操作是指將多個(gè)文檔進(jìn)行分組、篩選、排序、計(jì)算等操作,以生成新的文檔集合的過(guò)程。Python中可以使用pymongo庫(kù)來(lái)進(jìn)行MongoDB的聚合操作。

以下是一個(gè)簡(jiǎn)單的聚合操作示例,假設(shè)我們有一個(gè)名為students的集合,其中包含每個(gè)學(xué)生的姓名、年齡和成績(jī):

from pymongo import MongoClient

client = MongoClient()
db = client['test']
collection = db['students']

pipeline = [
    {"$group": {"_id": "$age", "avg_score": {"$avg": "$score"}}},
    {"$sort": {"_id": 1}}
]

result = collection.aggregate(pipeline)

for doc in result:
    print(doc)

上述代碼中,我們使用了MongoDB的group和group和avg操作符來(lái)計(jì)算每個(gè)年齡段的平均成績(jī),并使用$sort操作符按年齡升序排序。最終的結(jié)果將會(huì)是一個(gè)包含每個(gè)年齡段平均成績(jī)的文檔集合。

除了group和group和avg操作符外,MongoDB還提供了許多其他的聚合操作符,如match、match、project、sort、sort、limit等,可以根據(jù)具體需求進(jìn)行組合使用。

八丶索引

MongoDB中的索引是用于提高查詢性能的一種數(shù)據(jù)結(jié)構(gòu)。在MongoDB中,可以使用多種類型的索引,包括單字段索引、復(fù)合索引、全文索引等。

以下是使用Python操作MongoDB索引的示例:

創(chuàng)建單字段索引

from pymongo import MongoClient

client = MongoClient()
db = client.test_database
collection = db.test_collection

# 創(chuàng)建單字段索引
collection.create_index("name")

# 查詢是否創(chuàng)建成功
print(collection.index_information())

創(chuàng)建復(fù)合索引

from pymongo import MongoClient

client = MongoClient()
db = client.test_database
collection = db.test_collection

# 創(chuàng)建復(fù)合索引
collection.create_index([("name", 1), ("age", -1)])

# 查詢是否創(chuàng)建成功
print(collection.index_information())

創(chuàng)建全文索引

from pymongo import MongoClient

client = MongoClient()
db = client.test_database
collection = db.test_collection

# 創(chuàng)建全文索引
collection.create_index([("content", "text")])

# 查詢是否創(chuàng)建成功
print(collection.index_information())

查詢使用索引

from pymongo import MongoClient

client = MongoClient()
db = client.test_database
collection = db.test_collection

# 查詢使用索引
result = collection.find({"name": "Tom"}).explain()["executionStats"]
print(result)

以上是Python操作MongoDB索引的示例,可以根據(jù)實(shí)際需求選擇不同類型的索引來(lái)提高查詢性能。

九丶pymongo的操作

Python中操作MongoDB數(shù)據(jù)庫(kù)需要使用pymongo庫(kù),以下是pymongo庫(kù)的常用操作:

連接MongoDB數(shù)據(jù)庫(kù)

import pymongo

client = pymongo.MongoClient('mongodb://localhost:27017/')

選擇數(shù)據(jù)庫(kù)

db = client['database_name']

選擇集合

collection = db['collection_name']

插入文檔

data = {'name': 'John', 'age': 25}
collection.insert_one(data)

查詢文檔

result = collection.find_one({'name': 'John'})

更新文檔

collection.update_one({'name': 'John'}, {'$set': {'age': 30}})

刪除文檔

collection.delete_one({'name': 'John'})

查詢多個(gè)文檔

results = collection.find({'age': {'$gt': 20}})
for result in results:
    print(result)

以上是pymongo庫(kù)的常用操作,可以根據(jù)實(shí)際需求進(jìn)行調(diào)用。

本系列文根據(jù)以下學(xué)習(xí)路線展開(kāi)講述,由于內(nèi)容較多,:

從零開(kāi)始學(xué)python到高級(jí)進(jìn)階路線圖

下章講:機(jī)器學(xué)習(xí)模塊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容