導(dǎo)入庫拴袭,建立連接
a. from pymongo import MongoClient
b. client = MongoClient(host,port)創(chuàng)建數(shù)據(jù)庫 myDB (應(yīng)該叫連接數(shù)據(jù)庫,比較創(chuàng)建數(shù)據(jù)庫更合適)
a. db = client['myDB'] 或者
b. db = client.myDB
c. 兩者是一個(gè)意思,憑喜好選擇。注意罪佳,第一個(gè)【】里面是字符串
d. 如果數(shù)據(jù)庫myDB不存在,則重新創(chuàng)建一個(gè),如果存在列疗,則連接已存在的myDB數(shù)據(jù)庫建立集合myColletions(相當(dāng)于sql中的表單)
a. myColl = db['myColletions'] 或者
b. myColl = db.myColletions
c. 兩者是一個(gè)意思,憑喜好選擇浪蹂。注意抵栈,第一個(gè)【】里面是字符串
d. 如果集合myColletions不存在,則重新創(chuàng)建一個(gè)坤次,如果存在古劲,則連接已存在的myColletions集合插入文檔記錄(也就是sql中表單的行記錄)
a. 如果插入的集合不存在,則mongoDB自動(dòng)給你創(chuàng)建一個(gè)缰猴。
b. myColl.insert_one(BinaryJson) 插入單條數(shù)據(jù)
i. BinaryJson 可以簡單理解為 二進(jìn)制版的json,
mongoDB自動(dòng)將json轉(zhuǎn)換我BinaryJson产艾,如無特殊需要插入json即可
ii. 插入一條Json格式的文檔,也就是表單行記錄
iii. 如果插入的json格式文檔中不包括 '_id'字段滑绒,則mongoDB闷堡,自動(dòng)創(chuàng)建一個(gè)‘_id‘字段,
并生成一個(gè)ObjectId疑故,作為_id字段值杠览。
iv. 返回一個(gè) insertOneResult對(duì)象,它包括inserted_id屬性,
返回一個(gè)被插入對(duì)象的_id字段值。:
1) result = myColl.insert_one(json)
2) coll_id = result.inserted_id
c. myColl.inssert_many(jsonColletions)插入多條數(shù)據(jù)
i. 插入一個(gè)json文檔集合纵势,一般情況下是 列表踱阿,列表的每一個(gè)元素,必須是一個(gè)json格式數(shù)據(jù)對(duì)象
ii. 如果插入的json格式文檔中不包括 '_id'字段钦铁,則mongoDB扫茅,自動(dòng)創(chuàng)建一個(gè)‘_id‘字段,
并生成一個(gè)ObjectId育瓜,作為_id字段值
iii. 返回一個(gè)insertManyResult對(duì)象葫隙,它包括inserted_ids屬性,
返回被插入對(duì)象的_id字段值的列表-
查詢文檔記錄(sql中的表單查詢)
a. 查詢所有數(shù)據(jù)
i. myColl.find() 查詢集合中的所有文檔記錄(表中的行記錄)
1) 返回一個(gè)查詢結(jié)果的游標(biāo)躏仇,可迭代對(duì)象恋脚,就像open(fileName)函數(shù)一樣
a) result = myColl.find() f = open(fileName)
b) for value in result: for value in f:
c) print value print f
d) 輸出每一條文檔記錄(行記錄) 輸出每一行內(nèi)容
2) 相當(dāng)于 sql中的:
a) select * from myCollb. 查詢限定操作(也就是sql中的 where 語句) i. myColl.find({'name':'liming'}) 查詢集合中 字段 name = liming的記錄 1) 注意:括號(hào)內(nèi)部是一個(gè) 字典,或者 json格式的數(shù)據(jù)(其實(shí)都一個(gè)卵樣) 2) 字典 key = 集合內(nèi)文檔的字段焰手,value = 字段的值 3) 相當(dāng)于sql中: select * from myColl where name = 'liming' ii. 一些高級(jí)操作: 1) 比較操作: a) 小于比較: i) myColl.find({'age':{'$lt':30}} ii) 查詢age字段值 小于30的所有文檔記錄 iii) 注意:括號(hào)內(nèi)是一個(gè) 字典 iv) 字典 key = 文檔字段糟描,value 是一個(gè)字典,其中 key = 比較操作符, value =比較值 v) 相當(dāng)于sql中: select * from myColl where age < 30 b) 其他比較操作符 $gt 大于 $gte 大于等于 $lt 小于 $lte 小于等于 $ne 不等于 2) 組合查詢: a) 邏輯與 and i) myColl.find({'name':'liming','age':30}) ii) 查詢 name = liming 和 age = 30 的所有文檔記錄 iii) 注意:括號(hào)內(nèi)是一個(gè)字典书妻,兩個(gè)元素船响。用 逗號(hào)分隔開,key = 字段,value=字段值 iv) 相當(dāng)于sql: select * from myColl where name = 'liming' and age = 30 b) 邏輯或 or i) myColl.find({'$or':[{'name':'liming'},{'age':30}]}) ii) 查詢name = 'liming' 或 age = 30的所有文檔記錄 iii) 注意:括號(hào)內(nèi)是一個(gè)字典见间,key = '$or' 邏輯或操作符聊闯,value = 一個(gè)列表 列表內(nèi)是兩個(gè)字典,key = 字段米诉,value=字段值 iv) 相當(dāng)于sql: select * from myColl where name = 'liming' or age = 30 3) 對(duì)查詢結(jié)果進(jìn)行排序: a) myColl.find().sort('name',pymongo.DESCENDING) i) 對(duì)查詢結(jié)果按照字段 name進(jìn)行排序菱蔬,默認(rèn)為升序,可以指定排序方向史侣, DESCENDING是降序 ii) 相當(dāng)于sql: select * from myColl order by name DESC b) myColl.find().sort([{'name':pymongo.DESEDING',{'age':pymongo.DESEDING'}]) i) 對(duì)查詢結(jié)果排序拴泌,指定排序方向?yàn)?降序,默認(rèn)為升序惊橱。 先按照name字段排序蚪腐,在按照age字段排序 ii) 相當(dāng)于sql: select * from myColl order by name DESC ,age DESC DESC關(guān)鍵字只適用于 DESC前面的字段,需要的話税朴,可以對(duì)每個(gè)字段指定一次 DESC
-
更新數(shù)據(jù):
a. 更新指定字段
i. myColl.update_one() 更新一條文檔削茁,只更新找到的第一條記錄
1) 包含三個(gè)參數(shù):
a) 過濾器(篩選器),篩選出符合條件的文檔
b) 更新操作
c) 一些相關(guān)的更新參數(shù)設(shè)置2) myColl.update_one({'age':30},{'$set':{'name':'zhangsan'}}掉房,upsert=True) a) 更新查詢出來的符合 age = 30的第一條文檔記錄茧跋, b) 使用$set操作符 更新字段name 為 ’zhangsan‘ c) upsert = True 表示如果需要更新的字段不存在, 則mongoDB自動(dòng)創(chuàng)建該包含該字段的文檔卓囚,并更新該字段 i) 默認(rèn)為False瘾杭,表示文檔不存在時(shí),不創(chuàng)建新的文檔 d) 注意:第二個(gè)參數(shù)是一個(gè)字典 key = $set 更新操作符 value = 需要更新的字段哪亿,以及需要更新的值粥烁。。 3) 相當(dāng)于: update myColl set name = 'zhangsan' where age = 30 ii. myColl.update_many() 批量更新一組文檔蝇棉,更新找到的所有記錄 1) 使用方法與update_one()一樣 2) update_many()更新找到的所有記錄讨阻,update_one()只更新找到的第一條記錄。
-
清空集合內(nèi)容(sql中清空表單內(nèi)容)
a. myColl.delete_one() 刪除指定字段文檔記錄
i. 刪除一條記錄篡殷,值刪除找到的第一條記錄
ii. myColl.delete_one({'age':30})
1) 刪除age = 30 的所找到的第一條記錄
iii. 相當(dāng)于:
delete from myColl
where age = 30b. myColl.delete_many() i. 刪除找到的所有記錄 ii. 使用方法與 delete_one()一樣 1) 只是钝吮,delete_one()只刪除找到的第一條文檔記錄 2) delete_many()刪除找到的所有文檔記錄 c. myColl.delete_many({}) i. 一次性清空整個(gè)集合的所有文檔記錄 ii. 相當(dāng)于: delete from myColl
刪除集合(sql中刪除表單)
a. myColl.drop()
刪除一個(gè)集合,徹底的刪除板辽,而不是清空
b. 相當(dāng)于:
i. drop table myColl-
數(shù)據(jù)聚合:
a. 數(shù)據(jù)的分組奇瘦,以及統(tǒng)計(jì):
i. 根據(jù)一個(gè)字段分組文件,并計(jì)算總數(shù):
1) myColl.aggregate( [ {'$group' : {'_id' : '$age' , 'count':{'$sum':1} } } ]
對(duì)字段age的記錄進(jìn)行分組劲弦,并計(jì)算age字段相同值的總和
2) 括號(hào)里面是個(gè)列表
a) 元素是一個(gè)字典耳标,key = '$group' 分組操作符
b) value = 一個(gè)字典,兩個(gè)元素邑跪。
i) 第一個(gè)元素
One. key = '_id' ,這個(gè)是固定不變次坡,mongoDB按照id來查找文檔
Two. value = '$age' 需要分組的字段呼猪,必須以
ii) 第二個(gè)元素
One. key = 'count' 設(shè)立一個(gè)字段別名,來顯示統(tǒng)計(jì)值
Two. value = '$age' 需要分組的字段砸琅,必須以 $ 開頭
Three. value =一個(gè)字典:
First. key = '$sum' 聚合操作符:計(jì)算總和操作
Second. value = 1 表示計(jì)算查詢到的所有值
3) 相當(dāng)于:
select age as _id,count(*) as count
from myColl
group by ageii. 篩選并分組文檔: 1) myColl.aggregate([{[{'$match':{'name':'lisi','age':30}},{'$group':{'_id':'$age','count':{'$sum':1}}}]) a) 查詢name = 'lisi' and age = 30的文檔記錄 b) 并對(duì) age字段進(jìn)行分組宋距,并計(jì)算age字段相同值的總和 c) $match 篩選操作符 值為需要篩選的內(nèi)容 2) 相當(dāng)于: select age as _id,count(*) as count from myColl group by age having name = 'list' and age = 30 b. 其聚合操作符:
image.png
- PyMongo上的索引
a. 索引可以對(duì)查詢的高效執(zhí)行起到支持。如果沒有索引明棍,MongoDB必須進(jìn)行全表掃描乡革,
即掃描集合中的每個(gè)文檔寇僧,來選擇符合查詢條件的文檔摊腋。如果一個(gè)適當(dāng)?shù)乃饕嬖谟谝粋€(gè)查詢中,
MongoDB可以使用索引限制必須檢查文檔的數(shù)量嘁傀。
b. 創(chuàng)建索引
要?jiǎng)?chuàng)建一個(gè)升序的索引兴蒸,指定pymongo.ASCENDING為索引類型()。
要?jiǎng)?chuàng)建一個(gè)降序的索引细办,指定pymongo.DESCENDING為索引類型()橙凳。
i. myColl.creater_index()
1) 為集合myColl創(chuàng)建一個(gè)索引
2) MongoDB會(huì)在創(chuàng)建文檔的時(shí)候自動(dòng)為_id字段創(chuàng)建索引。
3) 只會(huì)在索引不存在的時(shí)候創(chuàng)建一個(gè)索引
ii. 指定索引:
1) myColl.create_index([('name',pymongo.ASCENDING)]
2) 為集合中的 name字段創(chuàng)建 自增(升序)索引
iii. 該方法返回創(chuàng)建索引的名字
c. 創(chuàng)建復(fù)合索引:
i. myColl.create_index([('name',pymongo.ASCENDING),('age',pymongo.DECENDING)])
ii. 在字段 name 和 age 上 創(chuàng)建一個(gè) 復(fù)合索引
iii. 指定name索引為升序笑撞,age索引為降序
iv. 索引的名字為:name索引_age索引