MongoDB是一款由C++語言編寫的非關系型數據庫,是一個基於分布式文件存儲的開源數據庫系統,其內容存儲方式類似於JSON對象,它的字段值可以是其它文檔或數組,但其數據類型只能是String文本型。
在使用之前我們要確保已經安裝好了MongoDB並啟動了該服務。此處主要用於Python數據的保存,我們要安裝Python的PyMongo庫,運行 ‘pip install pymongo’ 命令完成pymongo的安裝。進入python工作模式,可以通過pymongo.version 查看pymongo的版本信息。
第一步,連接MongoDB
我們通過PyMongo庫里的MongoClient。其中第一個參數 host 是mongodb的地址,第二個參數是端口 port (不傳參數的話默認是27017)
client = pymongo.MongoClient(host='127.0.0.1',port=27017)
另一種方法是直接傳遞MongoDB的連接字符串,以 mongodb 開頭。
client = pymongo.MongoClient('mongodb://127.0.0.1:27017/')
第二步,選擇數據庫或集合
在MongoDB中可以建立多個數據庫,其中每個數據庫又包含許多集合,類似於關系數據庫中的表。選擇數據庫有兩種方法,這兩種方法作用相同。
db = client.test # test數據庫
db = client['test']
選擇好數據庫后我們需要指定要操作的集合,與數據庫的選擇類似。
p = db.persons # persons集合
p = db['persons']
第三步,添加數據
person = { 'id':'00001', 'name':'Abc', 'age':19 } result = p.insert(person)
# 在PyMongo 3.x版本后,官方推薦使用insert_one(),該方法返回的不再是單純的_id值,我們需要執行result.inserted_id查看 _id 值 print(result)
此處通過對象的 insert() 方法添加了一條數據,添加成功后返回的是數據插入過程中自動添加的 _id 屬性值,這個值是唯一的。另外我們還可以添加多條數據,它以列表的形式進行傳遞。
person = { 'id':'00001', 'name':'Abc', 'age':19 } person1 = { 'id':'00002', 'name':'Dfg', 'age':20 } result = p.insert([person,person1])
# 推薦使用 insert_many() 方法,之后使用 result.inserted_ids 查看插入數據的 _id 列表 print(result)
第四步,查詢數據
查詢數據我們可以使用 find_one() 或 find() 方法,其中 find_one() 得到的是單個數據結果,find() 返回的是一個生成器對象。
res = p.find_one({'name':'Abc'}) # 查詢 name 為 Abc 的人的信息,返回字典型的數據 print(res)
find() 則用來查詢多條數據,返回 cursor 類型的生存器,我們要遍歷取得所有的數據結果。
res = p.find({'age':20}) # 查詢集合中age是20的數據
# res = p.find({'age':{'$gt':20}}) # 查詢集合中age大於20的數據 print(res) for r in res: print(r)
另外,我們還可以通過正則匹配進行查詢。
res = p.find({'name':{'$regex':'^A.*'}}) # 查詢集合中name以A開頭的數據
要統計查詢的結果一共有多少條數據,需要使用 count() 方法
count = p.find().count() # 統計集合中所有數據條數
排序則直接調用 sort() 方法,根據需求傳入升序降序標志即可
res = p.find().sort('age',pymongo.ASCENDING) # 將集合中的數據根據age進行排序,pymongo.ASCENDING表示升序,pymongo.DESCENDING表示降序
當我們只需要取得幾個元素時,我們可以使用 skip() 方法偏移幾個位置,得到去掉偏移個數之后剩下的元素數據
res = p.find({'name':{'$regex':'^A.*'}}).skip(2) print([ r['name'] for r in res ]) # 打印name以A開頭的數據的名稱name,從第三個顯示
第五步,更新數據
更新數據我們使用 update() 方法實現,並指定更新的條件和需要更新的數據即可。
where = {'name':'Abc'} res = p.find_one(where) res['age'] = 25 result = p.update(where, res) # 推薦使用 update_one() 或 update_many() print(result)
返回的是一個字典形式的數據,{'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True},其中 ok 表示執行成功,nModified 表示影響的數據條數。
另外我們還可以使用 $set 操作符對數據進行更新。使用$set則只更新字典內存在的字段,其它字段則不更新,也不刪除。如果不用則會更新所有的數據,而其它存在的字段則會被刪除。
where = {'age':{'$gt':20}}
result = p.update_many(where,{'$inc':{'age':1}}) # 將集合中年齡大於20的第一條的數據年齡加1
print(result)
print(result.matched_count,result.modified_count) # 獲取匹配的數據條數,影響的數據條數
第六步,刪除數據
刪除數據可以調用 remove() 方法,需要指定刪除條件。
result = p.remove({'name':'Abc'}) # 刪除名稱為Abc的數據,推薦使用 delete_one() 和 delete_many(),執行后調用 result.delete_count,獲得刪除的數據條數
返回的是一條字典型數據,{'ok':1,'n':1}
另外,我們還可以對索引進行操作,比如 create_index() 創建單個索引,create_indexes()創建多個索引,drop_index()刪除索引等方法。
參考:靜覓博客 https://cuiqingcai.com/5584.html