python3之MongoDB
1、MongoDB簡介
MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數據庫系統。
在高負載的情況下,添加更多的節點,可以保證服務器性能。
MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。
主要特點:
- MongoDB 是一個面向文檔存儲的數據庫,操作起來比較簡單和容易。
- 你可以在MongoDB記錄中設置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現更快的排序。
- 你可以通過本地或者網絡創建數據鏡像,這使得MongoDB有更強的擴展性。
- 如果負載的增加(需要更多的存儲空間和更強的處理能力) ,它可以分布在計算機網絡中的其他節點上這就是所謂的分片。
- Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
- MongoDb 使用update()命令可以實現替換完成的文檔(數據)或者一些指定的數據字段 。
- Mongodb中的Map/reduce主要是用來對數據進行批量處理和聚合操作。
- Map和Reduce。Map函數調用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數進行處理。
- Map函數和Reduce函數是使用Javascript編寫的,并可以通過db.runCommand或mapreduce命令來執行MapReduce操作。
- GridFS是MongoDB中的一個內置功能,可以用于存放大量小文件。
- MongoDB允許在服務端執行腳本,可以用Javascript編寫某個函數,直接在服務端執行,也可以把函數的定義存儲在服務端,下次直接調用即可。
- MongoDB支持各種編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
MongoDB工具:
使用于MongoDB管理的工具包括監控工具和GUI
監控:
MongoDB提供了網絡和系統監控工具Munin,它作為一個插件應用于MongoDB中。
Gangila是MongoDB高性能的系統監視的工具,它作為一個插件應用于MongoDB中。
基于圖形界面的開源工具 Cacti, 用于查看CPU負載, 網絡帶寬利用率,它也提供了一個應用于監控 MongoDB 的插件。
GUI:
- Fang of Mongo – 網頁式,由Django和jQuery所構成。
- Futon4Mongo – 一個CouchDB Futon web的mongodb山寨版。
- Mongo3 – Ruby寫成。
- MongoHub – 適用于OSX的應用程序。
- Opricot – 一個基于瀏覽器的MongoDB控制臺, 由PHP撰寫而成。
- Database Master — Windows的mongodb管理工具
- RockMongo — 最好的PHP語言的MongoDB管理工具,輕量級, 支持多國語言.
2、MongoDB安裝
(1)windows平臺安裝MongoDB
下載地址:https://www.mongodb.com/download-center#community
直接下載安裝文件,然后選擇安裝路徑安裝即可,安裝完成后通過系統服務啟動mongdb
(2)linux平臺安裝MongoDB
# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-4.0.0.tgz # tar xf mongodb-linux-x86_64-rhel62-4.0.0.tgz # mv mongodb-linux-x86_64-rhel62-4.0.0 /usr/local/mongod#echo "export PATH=$PATH:/usr/local/mongodb/bin" >> /etc/profile # . /etc/profile #創建數據目錄 # mkdir -p /data/db #啟動服務 # mongod更多安裝詳細:https://docs.mongodb.com/manual/installation/
3、mongoDB基本操作
(1)創建操作
創建或插入操作將新的文檔添加到集合中,如果集合不存在則插入操作將創建該集合
db.collection.insertOne() ?插入單個文檔
db.collection.insertMany() ? 插入多個文檔
db.collection.insert() ?將單個或多個文檔插入到集合中
?
> db.dba.insertOne({item:"card",qty:15}) {"acknowledged" : true,"insertedId" : ObjectId("5b35cabe638a2654f3efaa8f") } > #指定_id插入文檔 > db.dba.insertOne({_id:1,item:"python",qty:100}) { "acknowledged" : true, "insertedId" : 1 }#插入多個文檔 > db.dba.insertMany([{_id:2,item:"java",qty:88},{_id:3,item:'javascript',qty:77},{_id:4,item:'django',qty:66}]) { "acknowledged" : true, "insertedIds" : [ 2, 3, 4 ] }(2)查詢操作
讀取操作從集合中檢索文檔
db.collection.find()
> db.dba.find() #查詢集合所有> db.dba.find({_id:1}) #查詢_id為1的文檔> db.dba.find({_id:{$gt:2} }) #查詢_id大于2的文檔(3)更新操作
db.collection.updateOne() ? 更新單個文檔
db.collection.updateMany() ?更新多個文檔
db.collection.replaceOne() ?替換文檔
db.dba.updateOne({item:"python"},{$set:{qty:111}}) #修改item為python的qty為111#將data字段更新為當前日期,如果不存在則創建該字段 db.dba.updateOne({item:"python"},{$currentDate:{data:true}}) #將_id大于2的文檔修改qty的值并設置date字段為當前時間 db.dba.updateMany({_id:{$gt:2}},{$set:{qty:"hello"},$currentDate:{date:true}})#將_id為1的字段替換掉 db.dba.replaceOne({_id:1},{_id:1,item:"abc",qty:333,data:2018})(4)刪除操作
db.collection.deleteOne() ? #刪除一條文檔
db.collection.deleteMany() ? #刪除多條文檔
#刪除指定條件的一條文檔 db.dba.deleteOne({_id:1}) #刪除集合所有文檔 db.dba.deleteMany({})#刪除_id大于3的文檔 db.dba.deleteMany({_id:{$gt:3}})4、python使用MongoDB
(1)安裝MongoDB驅動程序
pip install pymongo(2)鏈接MongoDB
client=pymongo.MongoClient(host='localhost',port=27017) #或者 client=pymongo.MongoClient('mongodb://localhost:27017/')(3)指定數據庫
db=client.dba #或者 db=client['dba'](4)指定集合
collection=db.dba #或者 collection=db['dba'](5)插入數據
#插入數據單條數據 student={'_id':1,'name':'python','age':200, } #result=collection.insert(student) #print(result) #返回一個InsertOneResult實例 #插入多條數據 suudentany=[{'_id':2,'name':'java','age':300},{'_id':3,'name':'javascript','age':400},{'_id':4,'name':'c++','age':500} ] #result=collection.insert_many(suudentany) #print(result) #print(result.inserted_ids) #顯示插入數據id列表(6)查詢數據
result=collection.find_one({'name':'python'}) #查詢單條數據 print(type(result)) #返回字典類型 print(result) #查詢多條數據,需要迭代讀取 resultall=collection.find() for i in resultall:print(i)過濾查詢匹配的文檔
resultfiter=collection.find({'age':{'$gt':300}}) #查詢age大于300的文檔 for i in resultfiter:print(i)# {'_id': 3, 'name': 'javascript', 'age': 400} {'_id': 4, 'name': 'c++', 'age': 500}比較符號還有:$lt小于、$gt大于、$lte小于等于、$gte大于等于、$ne不等于、$in在范圍內、$nin不在范圍內
另外還可以用正則匹配$regex
result=collection.find({'name':{'$regex':'^p.*'}}) #匹配以P開頭的name其他功能符號:$exists屬性是否存在、$type類型判斷、$mod數字余數、$text文本查詢、$shere條件查詢
更多詳細用法可以在MongoDB官網找到:https://docs.mongodb.com/manual/reference/operator/query/
(7)計數
要統計查詢結果有多少條數據,可以調用count()方法
count=collection.find().count() #或者統計符合條件的數據 count=collection.find({'age':20}).count()(8)排序
排序時,直接調用sort()方法,并在其中傳入排序的字段及升降序標志即可
pymongo.ASCENDING為升序,pymongo.DESCENDING為降序
results=collection.find().sort('name',pymongo.ASCENDING)(9)偏移
如只想去某幾個元素,可以利用skip()方法偏移位置來忽略前面的元素
results=collection.find().sort('name',pymongo.ASCENDING).skip(2) #只取第三個及后面的元素另外還可以使用limit()方法指定要取的結果個數
results=collection.find().sort('name',pymongo.ASCENDING).skip(2).limit(2) #只取兩個結果(10)更新
可以使用update()方法來更新數據,但此方法不夠安全可以使用$set它只 更新存在文檔內存在的字段
result=collection.update({'name':'python'},{'date':8}) #上面方法不安全,它會將除了_id和要更新的數據外的其他字段會被刪除 #使用$set會比較安全 result=collection.update({'name':'python'},{'$set':{'date':12}})官方推薦使用update_one()和update_many()方法,來嚴格控制影響的字段,它需要使用$類型的操作字符來作為字典的鍵名
result=collection.update_one({'_id':3},{'$set':{'name':'javascript'}}) print(result) print(result.matched_count,result.modified_count) #打印匹配的數據條數和影響的數據條數#updata_many()會將所有符合條件的數據都更新 result=collection.update_many({'date':{'$gt':2}},{'$inc':{'data':10}}) #將所有date值大于2的文檔加上10(11)刪除
刪除可以使用的方法有remove()符合條件的數據都會被刪除,delete_one()值刪除符合條件的第一條和delete_many()刪除所有符合條件的
result=collection.delete_one({'name':'java'}) result1=collection.delete_many({'data':{'$gt':20}})(12)其他操作
pyMongo還提供了一些組合方法:
find_one_and_delete() ? 查找后刪除
find_one_and_replace() ?查找后替換
find_one_and_update() ?查找后更新
create_index() ? 在集合上創建索引
create_indexes() ?在集合上創建一個或多個索引
drop_index() ?刪除此集合上的索引
更多集合操作方法:http://api.mongodb.com/python/current/api/pymongo/collection.html
?pymongo的API文檔:http://api.mongodb.com/python/current/api/pymongo/index.html
轉載于:https://www.cnblogs.com/zhangxinqi/p/9242687.html
總結
以上是生活随笔為你收集整理的python3之MongoDB的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下Nginx访问web目录提示
- 下一篇: python优秀网友学习笔记推荐