【Python快速上手(三十一)】- Python MongoDB 詳解

目錄

  • Python快速上手(三十一)
    • Python MongoDB 詳解
      • 1. 安裝 pymongo
      • 2. 連接 MongoDB
      • 3. 創建和刪除集合
      • 4. CRUD 操作
      • 5. 查詢操作
      • 6. 索引
      • 7. 聚合
      • 8. 其他操作
      • 9. 連接池和超時
      • 10. 實際應用案例

Python快速上手(三十一)

Python MongoDB 詳解

MongoDB 是一種 NoSQL 數據庫,它使用文檔存儲數據,提供高性能、高可用性和易擴展性。Python 提供了 pymongo 庫來與 MongoDB 進行交互。本文將詳細講解如何使用 Python 與 MongoDB 進行各種操作,包括連接數據庫、CRUD 操作、查詢、索引和聚合。

1. 安裝 pymongo

在使用 MongoDB 前,需要安裝 pymongo 庫。可以使用以下命令安裝:

pip install pymongo

2. 連接 MongoDB

2.1 基本連接
使用 MongoClient 類連接到 MongoDB 服務器:

from pymongo import MongoClientclient = MongoClient('localhost', 27017)

2.2 使用 URI 連接
可以使用 MongoDB URI 連接字符串:

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

2.3 訪問數據庫
連接到特定的數據庫:

db = client['mydatabase']

或者:

db = client.mydatabase

2.4 認證
如果 MongoDB 需要認證,使用以下方式連接:

client = MongoClient('mongodb://username:password@localhost:27017/mydatabase')
db = client['mydatabase']

3. 創建和刪除集合

3.1 創建集合
MongoDB 會在第一次插入文檔時自動創建集合:

collection = db['mycollection']

3.2 刪除集合
使用 drop 方法刪除集合:

collection.drop()

4. CRUD 操作

4.1 插入文檔
4.1.1 插入單個文檔
使用 insert_one 方法插入一個文檔:

document = {"name": "John", "age": 25, "city": "New York"}
collection.insert_one(document)

4.1.2 插入多個文檔
使用 insert_many 方法插入多個文檔:

documents = [{"name": "Anna", "age": 28, "city": "London"},{"name": "Mike", "age": 32, "city": "Chicago"}
]
collection.insert_many(documents)

4.2 查詢文檔
4.2.1 查詢單個文檔
使用 find_one 方法查詢單個文檔:

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

4.2.2 查詢多個文檔
使用 find 方法查詢多個文檔:

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

4.3 更新文檔
4.3.1 更新單個文檔
使用 update_one 方法更新單個文檔:

collection.update_one({"name": "John"}, {"$set": {"age": 26}})

4.3.2 更新多個文檔
使用 update_many 方法更新多個文檔:

collection.update_many({"age": {"$gt": 20}}, {"$set": {"city": "San Francisco"}})

4.4 刪除文檔
4.4.1 刪除單個文檔
使用 delete_one 方法刪除單個文檔:

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

4.4.2 刪除多個文檔
使用 delete_many 方法刪除多個文檔:

collection.delete_many({"age": {"$gt": 20}})

5. 查詢操作

5.1 條件查詢
使用查詢操作符進行條件查詢:

results = collection.find({"age": {"$gte": 25}})

常用查詢操作符:

  • $eq:等于
  • $ne:不等于
  • $gt:大于
  • $gte:大于等于
  • $lt:小于
  • $lte:小于等于
  • $in:在指定數組內
  • $nin:不在指定數組內

5.2 邏輯操作符
使用邏輯操作符進行查詢:

results = collection.find({"$or": [{"age": {"$lt": 25}}, {"city": "London"}]})

常用邏輯操作符:

  • $and:與
  • $or:或
  • $not:非
  • $nor:非或

5.3 正則表達式
使用正則表達式進行查詢:

results = collection.find({"name": {"$regex": "^J"}})

5.4 字段選擇
指定返回的字段:

results = collection.find({}, {"_id": 0, "name": 1, "age": 1})

5.5 排序
使用 sort 方法進行排序:

results = collection.find().sort("age", -1)

5.6 限制和跳過
使用 limit 和 skip 方法進行分頁:

results = collection.find().skip(5).limit(10)

6. 索引

6.1 創建索引
使用 create_index 方法創建索引:

collection.create_index([("name", 1)])

6.2 列出索引
使用 list_indexes 方法列出索引:

for index in collection.list_indexes():print(index)

6.3 刪除索引
使用 drop_index 方法刪除索引:

collection.drop_index("name_1")

6.4 刪除所有索引
使用 drop_indexes 方法刪除所有索引:

collection.drop_indexes()

7. 聚合

7.1 基本聚合
使用 aggregate 方法進行聚合:

pipeline = [{"$match": {"age": {"$gte": 25}}},{"$group": {"_id": "$city", "average_age": {"$avg": "$age"}}}
]
results = collection.aggregate(pipeline)
for result in results:print(result)

7.2 聚合操作符
常用聚合操作符:

  • $match:過濾數據
  • $group:分組并進行計算
  • $sort:排序
  • $limit:限制結果數量
  • $skip:跳過指定數量的結果
  • $project:改變輸出文檔的結構
  • $unwind:拆分數組字段中的元素

7.3 聚合示例
計算每個城市的平均年齡:

pipeline = [{"$group": {"_id": "$city", "average_age": {"$avg": "$age"}}}
]
results = collection.aggregate(pipeline)
for result in results:print(result)

8. 其他操作

8.1 統計集合文檔數量
使用 count_documents 方法統計文檔數量:

count = collection.count_documents({"age": {"$gte": 25}})
print(count)

8.2 執行命令
使用 command 方法執行數據庫命令:

result = db.command("serverStatus")
print(result)

9. 連接池和超時

9.1 設置連接池
可以設置連接池參數,例如最大連接數:

client = MongoClient('mongodb://localhost:27017/', maxPoolSize=50)

9.2 設置超時
可以設置連接超時和操作超時:

client = MongoClient('mongodb://localhost:27017/', serverSelectionTimeoutMS=5000, socketTimeoutMS=2000)

10. 實際應用案例

10.1 用戶注冊系統
以下示例展示了如何使用 MongoDB 實現一個簡單的用戶注冊系統:

from pymongo import MongoClient
import datetimeclient = MongoClient('mongodb://localhost:27017/')
db = client['user_database']
users = db['users']# 注冊用戶
def register_user(username, password, email):user = {"username": username,"password": password,"email": email,"created_at": datetime.datetime.now()}users.insert_one(user)print(f"User {username} registered successfully")# 查詢用戶
def find_user(username):user = users.find_one({"username": username})if user:print(f"User found: {user}")else:print("User not found")# 更新用戶密碼
def update_password(username, new_password):result = users.update_one({"username": username}, {"$set": {"password": new_password}})if result.matched_count:print(f"Password updated for user {username}")else:print("User not found")# 刪除用戶
def delete_user(username):result = users.delete_one({"username": username})

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14760.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14760.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14760.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

移動硬盤容量消失無法讀取的解決方案

在數字化時代,數據的存儲和備份變得尤為重要。移動硬盤作為一種便捷、大容量的存儲設備,受到許多人的青睞。然而,有時我們可能會遭遇這樣的問題:移動硬盤不顯示容量且無法訪問。這種情況無疑給我們的數據存儲和管理帶來了巨大的困…

uniapp移動端骨架屏流程

1.使用微信開發者工具來生成骨架屏;在分窗模式下選擇頁面信息,下拉選擇生成骨架屏;他會基于當前頁面生成骨架屏的樣式 點擊確定; 會自動生成這兩個文件;一個是html結構文件,一個是css樣式文件。 然后把這兩…

黃石首家Pearson VUE國際認證考試中心落戶湖北理工學院

Pearson VUE 作為 Pearson 集團的專門從事計算機化考試服務的公司,到目前為止,已在全世界165 個國家授權了 4400 多個考試中心以及超過 230 家 PVUE 自有考試中心,其中在中國的有三百多個授權考點和 4 個自有考試中心。Pearson VUE 以其技術和…

LLaMa系列模型詳解(原理介紹、代碼解讀):LLaMA 3

LLaMA 3 2024年4月18日,Meta 重磅推出了Meta Llama 3,Llama 3是Meta最先進開源大型語言模型的下一代,包括具有80億和700億參數的預訓練和指令微調的語言模型,能夠支持廣泛的應用場景。這一代Llama在一系列行業標準基準測試中展示…

2021遼寧省大學生程序設計競賽(正式賽)

比賽經過:寫了七八題,有一個topsort寫錯地方了,本場題目都較為簡單考的知識都比較明顯 補題:有些題目還得多思考其實也不難 目錄 B.阿強的路 C.傳染病統計 D.阿強與網格 E.生活大爆炸 F.Capslock G.字節類型 H.制造游戲幣…

AI模型:開源VS閉源,誰主沉浮?

簡介:評價一個AI模型“好不好”“有沒有發展”,首先就躲不掉“開源”和“閉源”兩條發展路徑。對于這兩條路徑,你更看好哪一種呢? 開源AI模型的優點。 開源AI模型的最大優勢在于其開放性和可訪問性。通過將AI模型的源代碼公開&a…

java學習四

Random 隨機數 數組 靜態初始化數組 數組在計算機中的基本原理 數組的訪問 什么是遍歷 數組的動態初始化 動態初始化數組元素默認值規則 Java內存分配介紹 數組在計算機中的執行原理 使用數組時常見的一個問題 案例求數組元素最大值 public class Test1 {public static void ma…

<工控><PLC>匯川Easy521系列PLC與匯川SV630N伺服進行EtherCat通訊的相關配置及指令編寫

前言 本系列是關于PLC相關的博文,包括PLC編程、PLC與上位機通訊、PLC與下位驅動、儀器儀表等通訊、PLC指令解析等相關內容。 PLC品牌包括但不限于西門子、三菱等國外品牌,匯川、信捷等國內品牌。 除了PLC為主要內容外,PLC相關元器件如觸摸屏…

父子級分類統計分類下數量sql

1 SELECTA.* FROM(SELECTA.project_id,COALESCE ( A.category_id, 0 ) category_id,( -- 其它沒有查詢的分類, 就會是null, 所以會歸為其它CASEWHEN COALESCE ( A.category_name, 其他分類 ) 其他分類 THEN 其他 WHEN COALESCE ( A.category_name, 其他分類 ) 強電系統 THE…

【Unity3D美術】URP渲染管線學習01

掃盲簡介 URP渲染管線是Unity3d提供的一種視覺效果更好的渲染模式,類似的還有Built RP(默認最普通的渲染模式)\ HDRP(超高清,對設備要求高),視覺效果好,而且占用資源少!成為主流渲染管線模式&a…

基于Docker部署GitLab環境搭建

文件在D:\E\學習文檔子目錄壓縮\專項進階,如ngnix,webservice,linux,redis等\docker 建議虛擬機內存2G以上 1.下載鏡像文件 docker pull beginor/gitlab-ce:11.0.1-ce.0 注意:一定要配置阿里云的加速鏡像 創建GitLab 的配置 (etc) 、 日志 (log) 、數…

成功案例(IF=7.4)| 代謝組+16s聯合分析助力房顫代謝重構的潛在機制研究

研究背景 心房顫動(AF)是臨床上最常見的持續性心律失常,具有顯著的發病率和死亡率。高齡是房顫發病率、患病率和進展最顯著的危險因素。與年齡在50-59歲之間的參與者相比,80-89歲之間的參與者患房顫的風險增加了9.33倍。目前尚不…

nss刷題(3)

1、[SWPUCTF 2021 新生賽]include 根據提示傳入一個file后顯示了關于flag的代碼 這是一個文件包含,考慮php偽協議,構造payload: ?filephp://filter/readconvert.base64-encode/resourceflag.php 2、[SWPUCTF 2021 新生賽]Do_you_know_http …

Css 提高 - 獲取DOM元素

目錄 1、根據選擇器來獲取DOM元素 2.、根據選擇器來獲取DOM元素偽數組 3、根據id獲取一個元素 4、通過標簽類型名獲取所有該標簽的元素 5、通過類名獲取元素 目標:能查找/獲取DOM對象 1、根據選擇器來獲取DOM元素 語法: document.querySelector(css選擇…

cmake uninstall like

如果有install_manifest.txt cat install_manifest.txt | sudo xargs rm #cat install_manifest.txt | xargs ls建議make install之前查看有沒有make uninstall目標

cocos 寫 連連看 小游戲主要邏輯(Ts編寫)算法總結

cocos官方文檔:節點系統事件 | Cocos Creator 游戲界面展示 一、在cocos編譯器隨便畫個頁面 展示頁面 二、連連看元素生成 2.1、準備單個方塊元素,我這里就是直接使用一張圖片,圖片大小為100x100,錨點為(0&#xff0…

ESP32基礎應用之使用手機瀏覽器作為客戶端與ESP32作為服務器進行通信

文章目錄 1 準備2 移植2.1 softAP工程移植到simple工程中2.2 移植注意事項 3 驗證4 添加HTML4.1 瀏覽器顯示自己編譯的html4.2 在使用html發數據給ESP324.3 HTML 內容4.4 更新 html_test.html 1 準備 參考工程 Espressif\frameworks\esp-idf-v5.2.1\examples\wifi\getting_sta…

PMapper:助你在AWS中實現IAM權限快速安全評估

關于PMapper PMapper是一款功能強大的腳本工具,該工具本質上是一個基于Python開發的腳本/代碼庫,可以幫助廣大研究人員識別一個AWS賬號或AWS組織中存在安全風險的IAM配置,并對IAM權限執行快速評估。 PMapper可以將目標AWS帳戶中的不同IAM用戶…

Hive環境搭建

1 安裝Hive 下載文件 # wget -P /opt/ https://mirrors.huaweicloud.com/apache/hive/hive-2.3.8/apache-hive-2.3.8-bin.tar.gz 解壓縮 # tar -zxvf /opt/apache-hive-2.3.8-bin.tar.gz -C /opt/ 修改hive文件夾名字 # mv /opt/apache-hive-2.3.8-bin /opt/hive 配置環境變量 …

torch Embedding 學習筆記

文本向量化(Text Embedding):將文本數據(詞、句子、文檔)表示成向量的方法。 詞向量化將詞轉為二進制或高維實數向量,句子和文檔向量化則將句子或文檔轉為數值向量,通過平均、神經網絡或主題模…