更新時(shí)間:2021-04-01 來(lái)源:黑馬程序員 瀏覽量:
pymongo模塊中提供了4個(gè)對(duì)象與MongoDB數(shù)據(jù)庫(kù)進(jìn)行交互,分別是MongoClient對(duì)象、DataBase對(duì)象、Collection對(duì)象和Cursor對(duì)象。
1. MongoClient對(duì)象
MongoClient對(duì)象用于建立與MongoDB數(shù)據(jù)庫(kù)的連接,它可以使用如下構(gòu)造方法進(jìn)行創(chuàng)建:
MongoClient(host='localhost', port=27017, document_class=dict, tz_aware=False, connect=True, **kwargs)
以上方法中常用參數(shù)的含義如下:
host,表示主機(jī)地址,默認(rèn)為localhost。
port,表示連接的端口號(hào),默認(rèn)為27017。
document_class,表示數(shù)據(jù)庫(kù)執(zhí)行查詢操作后返回文檔的類型,默認(rèn)為dict。
建立連接到MongoDB數(shù)據(jù)庫(kù),示例如下:
client = MongoClient()
上述示例創(chuàng)建MongoClient對(duì)象時(shí)沒(méi)有傳入任何參數(shù),說(shuō)明建立連接到默認(rèn)主機(jī)地址和端口的MongoDB數(shù)據(jù)庫(kù)。
也可以顯式地指定主機(jī)地址和端口號(hào),示例如下:
client = MongoClient('localhost', 27017)
2. DataBase對(duì)象
DataBase對(duì)象表示一個(gè)數(shù)據(jù)庫(kù),可以通過(guò)MongoClient對(duì)象進(jìn)行獲取。通過(guò)上文創(chuàng)建的MongoClient對(duì)象client獲取數(shù)據(jù)庫(kù),示例如下:
data_base = client.db_name
需要注意的是,使用以上兩種方式獲取數(shù)據(jù)庫(kù)時(shí),若指定的數(shù)據(jù)庫(kù)db_name已經(jīng)存在,直接訪問(wèn)db_name數(shù)據(jù)庫(kù),否則創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)db_name。
3. Collection對(duì)象
Collection對(duì)象包含一組文檔,代表MongoDB數(shù)據(jù)庫(kù)中的集合,類似于關(guān)系數(shù)據(jù)庫(kù)中的表,但它沒(méi)有固定的結(jié)構(gòu)。創(chuàng)建Collection對(duì)象的方式與創(chuàng)建數(shù)據(jù)庫(kù)的方式類似,例如,通過(guò) data_base創(chuàng)建集合test_collection,代碼如下:
collection = db.test_collection
也可以采用訪問(wèn)字典值的形式創(chuàng)建Collection對(duì)象:
collection = db['test-collection']
表1 Collection對(duì)象常用方法
方法 | 說(shuō)明 |
---|---|
insert_one() | 向集合中插入一條文檔 |
insert_many() | 向集合中插入多條文檔 |
find_one() | 查詢集合中的一條文檔。若找到匹配的文檔,返回單個(gè)文檔,否則返回None |
find() | 查詢集合中的多條文檔。若找到匹配項(xiàng),則返回一個(gè)Cursor對(duì)象 |
update_one() | 更新集合中的一條文檔 |
update_many() | 更新集合中的多條文檔 |
delete_one() | 從集合中刪除一條文檔 |
delete_many() | 從集合中刪除多條文檔 |
count_documents(filter) | 根據(jù)匹配條件filter統(tǒng)計(jì)集合中的文檔數(shù)量。若傳入空字典,則返回所有文檔的數(shù)量;若傳入帶有鍵值對(duì)的字典,則返回符合條件的文檔數(shù)量 |
值得一提的是,pymongo中使用字典來(lái)表示MongoDB數(shù)據(jù)庫(kù)的文檔,每個(gè)文檔中都有一個(gè)_ id屬性,用于保證文檔的唯一性,當(dāng)它們插入到集合中時(shí)若未提供_ id,會(huì)被MongoDB自動(dòng)設(shè)置獨(dú)特的_id值。
4. Cursor對(duì)象
Cursor對(duì)象是通過(guò)Collection對(duì)象調(diào)用find()方法返回的查詢對(duì)象,該對(duì)象中包含有多條匹配的文檔,可結(jié)合for循環(huán)遍歷取出每條文檔。例如,使用insert_many()方法向collection中插入多條文檔,之后使用find()方法查詢匹配的文檔,代碼如下:
collection.insert_many([{'x': i} for i in range(2)]) cursor_obj = collection.find({'x': 1}) for document in cursor_obj: print(document)