引入
在這里我們來看一下Python3下MongoDB的存儲操作,在本節開始之前請確保你已經安裝好了MongoDB並啟動了其服務,另外安裝好了Python的PyMongo庫。
MongoDB 數據庫安裝與介紹可以查看之前的 MongoDB 教程。
安裝
pip3 install pymongo
使用pymongo
一,連接MongoClient
使用pymongo的第一步首先是連接Client來使用服務:
from pymongo import MongoClient Client = MongoClient()
二,獲取數據庫(database)
在MongoDB中一個實例能夠支持多個獨立的數據庫,你可以用點取屬性的方式來獲取數據庫,或者通過字典的方式獲取:
db = Client.test_database db = Client['test_database']
(注:'test'可以換成你想要用的名字,比如"python_database")
三,獲取Collection
Collection是存儲在MongoDB中的一組文件,同獲取database一樣,你可以用點取屬性的方式或者字典的方法獲取:
collection = db.test_collection collection = db['test_collection']
四,存儲數據
在MongoDB中,數據是以BSON的類型存儲的。見下面的post:
import datetime post = ['type':'BSON', 'date':datetime.datetime.utcnow()]
了解完MongoDB的數據格式后,你可以通過以下的方式插入數據(其中.inserted_id將返回ObjectId對象):
document1 = {'x':1} document2 = {'x':2} posts = db.posts #你也可以不這樣做,每次通過db.posts調用 post_1 = posts.insert_one(document1).inserted_id post_2 = posts.insert_one(document2).inserted_id
每個插入的數據對應一個ObjectId,可直接查看:
>>>post_1 ObjectId(...) >>>post_2 ObjectId(...)
你還可以用insert_many()插入多個文檔:
new_document = [{'x':3}, {'x':4}] result = posts.insert_many(new_document) >>>result.inserted_ids [ObjectId(...),ObjectId(...)]
五,從MongoDB中調用數據
>>>posts.find_one() ['x':'1']
但用find_one()的方法只能獲取一個數據,如果數據庫中存在多個數據時,它返回的是第一個的值。你也可以通過ObjectId來請求數據,效果和上面是一樣的。如果你想打印出全部數據,可以通過迭代的方式獲取:
>>>for data in posts.find(): >>> data >>>
{u'x':1, u'x':2, u'x':3, u'x':4}
你也可以加入限制性因素來獲取特定的數據:
>>>for post in posts.find({'x':1}): >>> post >>> {u'x':1}
查找條件中也可以用正則匹配來匹配calue。
六,更新數據
在pymongo中可以用update_one()來更新數據:
>>>posts.update_one({'x':4},{'$set':{'x':3}})
其中傳入的第一個參數是你想要更新的數據,第二個是你想要更新的最新數據。其中$set部分是必要元素,如果沒有會報出錯誤。除了$set外還有很多其它的比如$inc,對應着不同的功能,在此先不贅述。
上面只是更新匹配到的第一個數據,同樣地,也可以用update_many()一次更新多個值。
七,刪除數據
同上,可以用delete_one()和delete_many()方法來刪除數據,括號中是篩選條件:
>>>posts.delete_one({'x':3}) >>>posts.delete_one({'x':2})
八,計數
如果想知道collection中有多少文檔,可以用.count()請求來獲取符合條件的文檔。
>>>posts.count() 4 >>>posts.find({'x':1}) 1
完!!!