pymongo相關(guān)操作

  1. 導(dǎo)入庫拴袭,建立連接
    a. from pymongo import MongoClient
    b. client = MongoClient(host,port)

  2. 創(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ù)庫

  3. 建立集合myColletions(相當(dāng)于sql中的表單)
    a. myColl = db['myColletions'] 或者
    b. myColl = db.myColletions
    c. 兩者是一個(gè)意思,憑喜好選擇浪蹂。注意抵栈,第一個(gè)【】里面是字符串
    d. 如果集合myColletions不存在,則重新創(chuàng)建一個(gè)坤次,如果存在古劲,則連接已存在的myColletions集合

  4. 插入文檔記錄(也就是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字段值的列表

  5. 查詢文檔記錄(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 myColl

    b. 查詢限定操作(也就是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
    
  6. 更新數(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()只更新找到的第一條記錄。
    
  7. 清空集合內(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 = 30

      b. 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
    
  8. 刪除集合(sql中刪除表單)
    a. myColl.drop()
    刪除一個(gè)集合,徹底的刪除板辽,而不是清空
    b. 相當(dāng)于:
    i. drop table myColl

  9. 數(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 age

         ii. 篩選并分組文檔:
             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
  1. 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索引
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末岛啸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子茴肥,更是在濱河造成了極大的恐慌坚踩,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓤狐,死亡現(xiàn)場離奇詭異瞬铸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)础锐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門嗓节,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人皆警,你說我怎么就攤上這事拦宣。” “怎么了信姓?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵恢着,是天一觀的道長。 經(jīng)常有香客問我财破,道長掰派,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任左痢,我火速辦了婚禮靡羡,結(jié)果婚禮上系洛,老公的妹妹穿的比我還像新娘。我一直安慰自己略步,他們只是感情好描扯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趟薄,像睡著了一般绽诚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杭煎,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天恩够,我揣著相機(jī)與錄音,去河邊找鬼羡铲。 笑死蜂桶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的也切。 我是一名探鬼主播扑媚,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雷恃!你這毒婦竟也來了疆股?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤倒槐,失蹤者是張志新(化名)和其女友劉穎旬痹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體导犹,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唱凯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谎痢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磕昼。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖节猿,靈堂內(nèi)的尸體忽然破棺而出票从,到底是詐尸還是另有隱情,我是刑警寧澤滨嘱,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布峰鄙,位于F島的核電站,受9級(jí)特大地震影響太雨,放射性物質(zhì)發(fā)生泄漏吟榴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一囊扳、第九天 我趴在偏房一處隱蔽的房頂上張望吩翻。 院中可真熱鬧兜看,春花似錦、人聲如沸狭瞎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熊锭。三九已至弧轧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碗殷,已是汗流浹背精绎。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亿扁,地道東北人捺典。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓鸟廓,卻偏偏與公主長得像从祝,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子引谜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法牍陌,類相關(guān)的語法,內(nèi)部類的語法员咽,繼承相關(guān)的語法毒涧,異常的語法,線程的語...
    子非魚_t_閱讀 31,643評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理贝室,服務(wù)發(fā)現(xiàn)契讲,斷路器,智...
    卡卡羅2017閱讀 134,667評(píng)論 18 139
  • 夢中的溫柔即是夢魘 一種夢醒時(shí)破碎的痛 在她的懷里 我的眼角旁 流過的 那是現(xiàn)實(shí) 與永遠(yuǎn)無法得到的虛妄
    寫廢紙的熊閱讀 225評(píng)論 10 5
  • 文/陌忘芊 我已經(jīng)很少看電視了,可昨天晚上十點(diǎn)峡迷,我特意打開了電視银伟,等著《我是歌手》聽張信哲的那首歌。 前奏響起的那...
    陌忘芊閱讀 11,076評(píng)論 143 378