您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何在Python中使用pymongo模塊,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
MongoDB優(yōu)點(diǎn)
MongoDB是一個為當(dāng)代web應(yīng)用而生的noSQL數(shù)據(jù)庫,它有如下優(yōu)點(diǎn):
1、文檔型存儲??梢园?a title="關(guān)系型數(shù)據(jù)庫" target="_blank" href="http://www.kemok4.com/mysql/">關(guān)系型數(shù)據(jù)庫的表理解為一個電子表格,列表示字段,每行的記錄其實是按照列的字段順序排列的值得元組。而存儲在MongoDB中的文檔被存儲為鍵-值對的形式,值卻可以是任意類型且可以嵌套。之前在用關(guān)系型數(shù)據(jù)庫的時候,我們把產(chǎn)品信息打散到不同的表中,要通過關(guān)系表或者使用join拼接成復(fù)雜的SQL語句的方式才能獲得需要的數(shù)據(jù)?,F(xiàn)在我們可以更多地把產(chǎn)品信息放在一起,也不需要提前預(yù)定產(chǎn)品信息的模式。多好。
2、使用高效的二進(jìn)制BSON作為數(shù)據(jù)存儲,BSON是一個類JSON的格式,選擇BSON可以提供更快的遍歷速度,提供比JSON更多地內(nèi)置數(shù)據(jù)類型。
3、自帶高可用及分區(qū)的解決方案。
4、基于文檔的富查詢語言。MongoDB支持動態(tài)查詢,支持非常多的查詢方式,并且可以對文檔中的屬性建立索引。
5、內(nèi)置聚合工具??梢酝ㄟ^MapReduce等方式進(jìn)行復(fù)雜的統(tǒng)計和并行計算。
6、MongoDB在3.0 之后增加了高性能,可伸縮,支持壓縮文檔級鎖的數(shù)據(jù)存儲引擎(WiredTiger),官方的性能測試顯示,使用新的存儲引擎后帶來4~7倍的性能提升哦。
安裝MongoDB的python 驅(qū)動:
pip install pymongo
下面是一些操作例子:
# coding=utf-8 import random import pymongo client = pymongo.MongoClient('mongodb://localhost:27017/') client.drop_database('test') # 保證之前沒有數(shù)據(jù), 刪除名為test的數(shù)據(jù)庫 db = client.test # 使用test這個數(shù)據(jù)庫 coll = db.coll # 使用coll這個集合 # 插入單條 rs = coll.insert_one({'a': 1, 'b': 2}) object_id = rs.inserted_id print rs.inserted_id # 打印插入的對象id # 插入多條 rs = coll.insert_many([{'a': random.randint(1, 10), 'b': 10} for _ in range(10)]) print rs.inserted_ids # 打印插入的對象id列表 # 查詢單條(符合的第一條) print coll.find_one({'a': 1, 'b': 2}) # 集合當(dāng)前全部文檔數(shù) print coll.count() cursor = coll.find({'a': {'$lte': 1}}) # 查詢結(jié)果是一個游標(biāo) print cursor.count() # 符合查詢的文檔數(shù) for r in cursor: print r, r['b'] # 打印符合查詢的文檔內(nèi)容, 以及其中b鍵的值 # 注意, 這個循環(huán)只能進(jìn)行一次. 如果想再獲得需要重新find或者使用list(cursor)把結(jié)果存起來 # 對查詢結(jié)果排序 print list(coll.find({'a': {'$lte': 1}}).sort([('b', -1)])) # -1也可以表示為pymongo.DESCENDING # 對查詢結(jié)果可以限制返回文檔數(shù), 控制跳過的結(jié)果數(shù) print coll.find({'b': {'$gt': 1}}).limit(1).skip(1).next() # next相當(dāng)于find_one # 找到后更新, 下面例子第一個參數(shù)是過濾條件, 第二個參數(shù)是要更新的操作(設(shè)置b為3, a自增長1) # upsert為True表示找不到會創(chuàng)建一個,也就是get_or_create rs = coll.find_one_and_update({'a': 1, 'b': 2}, {'$set': {'b': 3}, '$inc': {'a': 1}}, upsert=False) print rs # 返回更新前的文檔 # 同樣的還有find_one_and_replace和find_one_and_delete print list(coll.find({'a': 2, 'b': 3})) # 上述文檔已經(jīng)被更新為這個文檔 coll.find_one_and_update({'a': 1, 'b': 2}, {'$set': {'b': 3}, '$inc': {'a': 1}}, upsert=True) # 雖然沒有符合{'a': 1, 'b': 2}的記錄,但是會新建一個 print coll.find({'a': 2, 'b': 3}).count() # 發(fā)現(xiàn)現(xiàn)在有2條文檔記錄了 # 刪除單個文檔 coll.delete_one({'a': 2, 'b': 3}) # 一次性刪除多個文檔 rs = coll.delete_many({'a': 2, 'b': 3}) # 如果沒有符合的條目也不會提示, 但是可以通過rs.deleted_count獲得刪除的數(shù)量 print rs.deleted_count
上述內(nèi)容就是如何在Python中使用pymongo模塊,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。