Python 操作 MongoDB 講解詳細

1、連接MongoDB

需要使用Python第三方庫pymongo來連接以及操作MongoDB,可以使用pip install pymongo進行安裝。 可以使用下面代碼來創建一個MongoDB的連接對象。

import pymongo


client = pymongo.MongoClient(host='localhost', port=27017)

一般來說傳入兩個參數就可以,第一個參數為地址host(默認是localhost)第二個參數為端口port(默認是27017)。
還有一種方法是host參數直接傳入MongoDB的連接字符串,例如:

client = pymongo.MongoClient('mongodb://localhost:27017')

2、指定(切換)數據庫

db = client.test
# 或者
# db = client['test']

如果該數據庫不存在,則自動創建,否則切換到指定數據庫。 註意: 新創建的數據庫,在沒有插入數據之前在可視化工具裡看不到。

3、指定(切換)集合

MongoDB的數據庫中包含很多集合collection,類似於關系型數據庫中的表,同樣,我們可以使用下面和指定數據庫類似的方式,指定要操作的集合。

collection = db.users
# 或者
collection = db['users']

4、插入數據

調用collection的insert_one()方法可以插入單條數據。

user = {
    'name': 'tigeriaf',
    'gender': 'male',
    'age': 24
}

collection.insert_one(user)

MongoDB中,每條數據都有一個唯一的_id屬性,如果沒有顯式的指明_idMongoDB會自動生成ObjectId類型的_id屬性。

當然我們也可以插入多條數據,使用的是insert_many()方法,數據以列表形式傳遞。

user_list = [
    {
        'name': 'zhangsan',
        'gender': 'male',
        'age': 25
    },
    {
        'name': 'lisi',
        'gender': 'male',
        'age': 24

    },
    {
        'name': 'wangwu',
        'gender': 'female',
        'age': 24

    }
]

collection.insert_many(user_list)

5、查詢數據

通過find_one()find()方法進行數據的查詢,find_one()查詢返回單個結果,find()返回多個結果。

result = collection.find_one({'name': 'tigeriaf'})
print(type(result), result)

我們查詢的是nametigeriaf的數據,返回結果是字典類型,運行結果如下:

<class 'dict'> {'_id': ObjectId('614be85f1cc0a98d6f034de7'), 'name': 'tigeriaf', 'gender': 'male'}

對於多條數據的查詢,我們可以使用find()方法,例如在這裡查找年齡為20的數據,示例如下:

results = collection.find({'gender': "male"})
print(results)
for result in results:
    print(result)

運行結果如下:

<pymongo.cursor.Cursor object at 0x0BDF8210>
{‘_id’: ObjectId(‘614be85f1cc0a98d6f034de7’), ‘name’: ‘tigeriaf’, ‘gender’: ‘male’}
{‘_id’: ObjectId(‘614beb3ad0f17d253e2ef81c’), ‘name’: ‘zhangsan’, ‘gender’: ‘male’}
{‘_id’: ObjectId(‘614beb3ad0f17d253e2ef81d’), ‘name’: ‘lisi’, ‘gender’: ‘male’}

返回結果是Cursor類型,我們可以遍歷取到所有的結果。

6、統計查詢

可以調用count()方法來統計查詢結果的條數。

count = collection.find({'gender': "male"}).count()
print(count)

7、結果排序

可以調用sort()方法對查詢的數據進行排序。

results = collection.find().sort('name', pymongo.ASCENDING)
for result in results:
    print(result)

運行結果如下:

{‘_id’: ObjectId(‘614bf7fca5af6d1d46df0878’), ‘name’: ‘lisi’, ‘gender’: ‘male’, ‘age’: 24}
{‘_id’: ObjectId(‘614bf72ab1b973eae1b32fee’), ‘name’: ‘tigeriaf’, ‘gender’: ‘male’, ‘age’: 24}
{‘_id’: ObjectId(‘614bf7fca5af6d1d46df0879’), ‘name’: ‘wangwu’, ‘gender’: ‘female’, ‘age’: 24}
{‘_id’: ObjectId(‘614bf7fca5af6d1d46df0877’), ‘name’: ‘zhangsan’, ‘gender’: ‘male’, ‘age’: 25}

8、偏移

在某些情況下我們可能隻想獲取某幾條數據,可以使用skip()方法進行偏移操作,比如skip(2) ,就忽略前2條數據,得到第3條之後的數據。

results = collection.find().sort('name', pymongo.ASCENDING).skip(2)
for result in results:
    print(result)

運行結果如下:

{‘_id’: ObjectId(‘614bf7fca5af6d1d46df0879’), ‘name’: ‘wangwu’, ‘gender’: ‘female’, ‘age’: 24}
{‘_id’: ObjectId(‘614bf7fca5af6d1d46df0877’), ‘name’: ‘zhangsan’, ‘gender’: ‘male’, ‘age’: 25}

另外還可以使用limit()方法限制結果個數。

results = collection.find().sort('name', pymongo.ASCENDING).skip(1).limit(2)
for result in results:
    print(result)

運行結果如下:

{‘_id’: ObjectId(‘614bf72ab1b973eae1b32fee’), ‘name’: ‘tigeriaf’, ‘gender’: ‘male’, ‘age’: 24}
{‘_id’: ObjectId(‘614bf7fca5af6d1d46df0879’), ‘name’: ‘wangwu’, ‘gender’: ‘female’, ‘age’: 24}

9、更新數據

可以使用update_one()方法和update_many()方法對數據進行更新,update_one()方法更新一條數據,update_many()方法更新多條數據。

condition = {'name': 'wangwu'}
user = collection.find_one(condition)
user['age'] += 1
result = collection.update_one(condition, {'$set': user})
print(result)
print(result.matched_count, result.modified_count)

在這裡調用瞭update_one()方法修改namewangwu的數據,第二個參數需要使用$類型操作符作為字典的鍵名,返回結果調用matched_countmodified_count屬性可以獲得匹配的數據條數和影響的數據條數。

運行結果如下:

<pymongo.results.UpdateResult object at 0x0C96E738>
1 1

調用update_many()方法會更新所有符合條件的數據。

condition = {'age': 24}
result = collection.update_many(condition, {'$inc': {'age': 1}})
print(result)
print(result.matched_count, result.modified_count)

上述代碼指定瞭查詢條件為age等於24,然後更新條件為{'$inc': {'age': 1}} ,也就是age加1。

<pymongo.results.UpdateResult object at 0x0CB628A0>
2 2

可以看到更新瞭多條數據。

10、刪除數據

可以使用delete_one()方法和delete_many()方法刪除數據,delete_one()方法刪除一條數據,delete_many()方法刪除多條數據。

result = collection.delete_one({'name': 'zhangsan'})
print(result.deleted_count)
result = collection.delete_many({'gender': "male"})
print(result.deleted_count)

運行結果如下:

1
2

delete_one()刪除的是第一條符合條件的數據,delete_many()刪除的是所有符合條件的數據。

到此這篇關於Python 操作 MongoDB 講解詳細的文章就介紹到這瞭,更多相關Python 操作 MongoDB內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: