網站首頁 編程語言 正文
MongoDB?是一個基于分布式文件存儲的數據庫。是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。
MongoDB?是目前最流行的 NoSQL 數據庫之一,使用的數據類型 BSON(類似 JSON)。
首先需要安裝MongoDB,安裝過程就不詳細贅述了
然后Python 要連接 MongoDB 需要 MongoDB 驅動,用pip安裝
pip install pymongo
插入文檔
MongoDB 中的一個文檔類似 SQL 表中的一條記錄。
插入集合
集合中插入文檔使用 insert_one() 方法,該方法的第一參數是字典 name => value 對。
例:向 sites 集合中插入文檔
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
mydict = { "name": "NOWCODER", "alexa": "10000", "url": "https://www.nowcoder.com" }
x = mycol.insert_one(mydict)
print(x)
print(x)
結果如下:
<pymongo.results.InsertOneResult object at 0x10a34b288>
返回 _id 字段
insert_one() 方法返回 InsertOneResult 對象,該對象包含 inserted_id 屬性,它是插入文檔的 id 值。
import pymongo
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
mydb = myclient['nowcoderdb']
mycol = mydb["sites"]
mydict = { "name": "Google", "alexa": "1", "url": "https://www.google.com" }
x = mycol.insert_one(mydict)
print(x.inserted_id)
結果如下:?
5b2369cac315325f3698a1cf
插入多個文檔
集合中插入多個文檔使用 insert_many() 方法,該方法的第一參數是字典列表。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
mylist = [
{ "name": "Taobao", "alexa": "100", "url": "https://www.taobao.com" },
{ "name": "QQ", "alexa": "101", "url": "https://www.qq.com" },
{ "name": "Facebook", "alexa": "10", "url": "https://www.facebook.com" },
{ "name": "知乎", "alexa": "103", "url": "https://www.zhihu.com" },
{ "name": "Github", "alexa": "109", "url": "https://www.github.com" }
]
x = mycol.insert_many(mylist)
# 輸出插入的所有文檔對應的 _id 值
print(x.inserted_ids)
輸出結果類似如下:
[ObjectId('5b236aa9c315325f5236bbb6'), ObjectId('5b236aa9c315325f5236bbb7'), ObjectId('5b236aa9c315325f5236bbb8'), ObjectId('5b236aa9c315325f5236bbb9'), ObjectId('5b236aa9c315325f5236bbba')]
插入指定 _id 的多個文檔
我們也可以自己指定 id,插入,以下實例我們在 site2 集合中插入數據,_id 為我們指定的:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["site2"]
mylist = [
{ "_id": 1, "name": "NOWCODER", "cn_name": "牛客教程"},
{ "_id": 2, "name": "Google", "address": "Google 搜索"},
{ "_id": 3, "name": "Facebook", "address": "臉書"},
{ "_id": 4, "name": "Taobao", "address": "淘寶"},
{ "_id": 5, "name": "Zhihu", "address": "知乎"}
]
x = mycol.insert_many(mylist)
# 輸出插入的所有文檔對應的 _id 值
print(x.inserted_ids)
結果如下:
[1, 2, 3, 4, 5]
查詢文檔
MongoDB 中使用了 find 和 find_one 方法來查詢集合中的數據,它類似于 SQL 中的 SELECT 語句。
查詢一條數據
我們可以使用 find_one() 方法來查詢集合中的一條數據。
例:查詢 sites 文檔中的第一條數據
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
x = mycol.find_one()
print(x)
結果如下:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}
查詢集合中所有數據
find() 方法可以查詢集合中的所有數據,類似 SQL 中的 SELECT * 操作。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
for x in mycol.find():
print(x)
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'alexa': '10', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}
查詢指定字段的數據
我們可以使用 find() 方法來查詢指定字段的數據,將要返回的字段對應值設置為 1。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }):
print(x)
結果如下:
{'name': 'NOWCODER', 'alexa': '10000'}
{'name': 'Google', 'alexa': '1'}
{'name': 'Taobao', 'alexa': '100'}
{'name': 'QQ', 'alexa': '101'}
{'name': 'Facebook', 'alexa': '10'}
{'name': '知乎', 'alexa': '103'}
{'name': 'Github', 'alexa': '109'}
根據指定條件查詢
我們可以在 find() 中設置參數來過濾數據。
例:查找 name 字段為 "NOWCODER" 的數據
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
myquery = { "name": "NOWCODER" }
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
結果如下:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}
高級查詢
查詢的條件語句中,我們還可以使用修飾符。
以下實例用于讀取 name 字段中第一個字母 ASCII 值大于 "H" 的數據,大于的修飾符條件為 {"$gt": "H"} :
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
myquery = { "name": { "$gt": "H" } }
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
結果如下:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
返回指定條數記錄
如果我們要對查詢結果設置指定條數的記錄可以使用 limit() 方法,該方法只接受一個數字參數。
例:返回 3 條文檔記錄
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
myresult = mycol.find().limit(3)
# 輸出結果
for x in myresult:
print(x)
結果只有三條了:?
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
修改文檔
我們可以在 MongoDB 中使用 update_one() 方法修改文檔中的記錄。該方法第一個參數為查詢的條件,第二個參數為要修改的字段。如果查找到的匹配數據多余一條,則只會修改第一條。
例:將 alexa 字段的值 10000 改為 12345
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
myquery = { "alexa": "10000" }
newvalues = { "$set": { "alexa": "12345" } }
mycol.update_one(myquery, newvalues)
# 輸出修改后的 "sites" 集合
for x in mycol.find():
print(x)
update_one() 方法只能修匹配到的第一條記錄,如果要修改所有匹配到的記錄,可以使用 update_many()。
以下實例將查找所有以 F 開頭的 name 字段,并將匹配到所有記錄的 alexa 字段修改為 123:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
myquery = { "name": { "$regex": "^F" } }
newvalues = { "$set": { "alexa": "123" } }
x = mycol.update_many(myquery, newvalues)
print(x.modified_count, "文檔已修改")
排序
sort() 方法可以指定升序或降序排序。
sort() 方法第一個參數為要排序的字段,第二個字段指定排序規則,1 為升序,-1 為降序,默認為升序。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
mydoc = mycol.find().sort("alexa")
for x in mydoc:
print(x)
以上代碼實現了對字段 alexa 按升序排序。
刪除數據
我們可以使用 delete_one() 方法來刪除一個文檔,該方法第一個參數為查詢對象,指定要刪除哪些數據。
例:刪除 name 字段值為 "Taobao" 的文檔
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
myquery = { "name": "Taobao" }
mycol.delete_one(myquery)
# 刪除后輸出
for x in mycol.find():
print(x)
刪除多個文檔
我們可以使用 delete_many() 方法來刪除多個文檔,該方法第一個參數為查詢對象,指定要刪除哪些數據。
例:刪除所有 name 字段中以 F 開頭的文檔
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
myquery = { "name": {"$regex": "^F"} }
x = mycol.delete_many(myquery)
print(x.deleted_count, "個文檔已刪除")
結果如下:
1 個文檔已刪除
刪除集合中的所有文檔
delete_many() 方法如果傳入的是一個空的查詢對象,則會刪除集合中的所有文檔:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
x = mycol.delete_many({})
print(x.deleted_count, "個文檔已刪除")
結果如下:
5 個文檔已刪除
刪除集合
我們可以使用 drop() 方法來刪除一個集合。
以下實例刪除了 customers 集合:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["nowcoderdb"]
mycol = mydb["sites"]
mycol.drop()
如果刪除成功 drop() 返回 true,如果刪除失敗(集合不存在)則返回 false。
原文鏈接:https://blog.csdn.net/knighthood2001/article/details/127063083
相關推薦
- 2022-11-03 刪除?Tomcat?webapps?目錄自帶項目方式詳解_Tomcat
- 2023-05-11 Oracle怎么刪除數據,Oracle數據刪除的三種方式_oracle
- 2023-03-25 React錯誤邊界Error?Boundaries_React
- 2022-06-20 golang常用加密解密算法總結(AES、DES、RSA、Sha1、MD5)_Golang
- 2022-11-04 golang?cache帶索引超時緩存庫實戰示例_Golang
- 2022-07-22 Python函數默認參數避坑指南
- 2022-06-19 教你用vbs實現微信自動發送消息功能_vbs
- 2022-09-13 ios開發Flutter之數據存儲_IOS
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支