MongoDB 是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。javascript
在高負載的狀況下,添加更多的節點,能夠保證服務器性能。html
MongoDB 旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。java
MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔,數組及文檔數組。python
主要特色:linux
MongoDB工具:c++
使用於MongoDB管理的工具包括監控工具和GUIweb
監控:mongodb
MongoDB提供了網絡和系統監控工具Munin,它做爲一個插件應用於MongoDB中。數據庫
Gangila是MongoDB高性能的系統監視的工具,它做爲一個插件應用於MongoDB中。django
基於圖形界面的開源工具 Cacti, 用於查看CPU負載, 網絡帶寬利用率,它也提供了一個應用於監控 MongoDB 的插件。
GUI:
(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/
(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}})
(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