MongoDB學習【四】—pymongo操做mongodb數據庫

1、pymongodb的安裝

Python 要鏈接 MongoDB 須要 MongoDB 驅動,這裏咱們使用 PyMongo 驅動來鏈接。python

pip安裝

pip 是一個通用的 Python 包管理工具,提供了對 Python 包的查找、下載、安裝、卸載的功能。正則表達式

安裝 pymongomongodb

python3 -m pip3 install pymongo
python3 -m pip3 install pymongo==3.5.1  # 指定版本安裝

2、pymongodb操做mongodb數據庫

1.鏈接數據庫

經過pymongo鏈接mongodb數據庫數據庫

import pymongo
client = pymongo.MongoClient("127.0.0.1", 27017)
dblist = client.database_names()  # 顯示服務器上的全部數據庫
# 新版本寫法
dblist = client.list_database_names()
​
db = client["practice"]  # 鏈接數據庫,獲取庫,若是庫名存在,則使用,不存在建立
# print(db)  # 數據庫操做對象

2.文檔的增長

集合中插入文檔使用 insert_one() 方法,該方法的第一參數是字典 name => value 對。服務器

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 鏈接數據庫,獲取庫,若是庫名存在,則使用,不存在建立
# print(db)  # 數據庫操做對象
"""增長"""
# 增長單條
mydict = {"name":"ryxiong","age":99}
res = db.stu.insert_one(mydict)
print(res.inserted_id)  # 5d2ed8f865d6b8f1c494ff78 ObjectId對象,不是字符串
# 增長多條
mylist = [{"name":"black"},{"name":"white"}]
res = db.stu.insert_many(mylist)
print(res.inserted_ids)  # [ObjectId('5d2fcc93c4f3d6ecb7178c87'), ObjectId('5d2fcc93c4f3d6ecb7178c88')]

3.查詢文檔

MongoDB 中使用了 find 和 find_one 方法來查詢集合中的數據,它相似於 SQL 中的 SELECT 語句。工具

查詢一條數據

咱們能夠使用 find_one() 方法來查詢集合中的一條數據。spa

import pymongo
from bson import ObjectId
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 鏈接數據庫,獲取庫,若是庫名存在,則使用,不存在建立
​
res1 = db.stu.find_one({"name": "ryxiong"})
res2 = db.stu.find_one({"_id": ObjectId("5d2f0a052a8ee222edddb297")})  # 將字符串的ObjectID轉爲對象後查詢

查詢集合中的全部數據或多條

find() 方法能夠查詢集合中的全部數據,相似 SQL 中的 SELECT * 操做。3d

import pymongo
from bson import ObjectId
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 鏈接數據庫,獲取庫,若是庫名存在,則使用,不存在建立
# 查詢多個
res3 = db.stu.find({})  # 查詢全部記錄
res4 = db.stu.find({"name": "ryxiong"})  # 查詢符合條件的全部,生成器

高級查詢

查詢的條件語句中,咱們還能夠使用修飾符。code

如下實例用於讀取 name 字段中第一個字母 ASCII 值大於 "H" 的數據,大於的修飾符條件爲 {"$gt": "H"}對象

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 鏈接數據庫,獲取庫,若是庫名存在,則使用,不存在建立
​
myquery = { "name": { "$gt": "H" } }
res = mycol.find(myquery)

正則表達式查詢

咱們還能夠使用正則表達式做爲修飾符。

正則表達式修飾符只用於搜索字符串的字段。

如下實例用於讀取 name 字段中第一個字母爲 "R" 的數據,正則表達式修飾符條件爲 {"$regex": "^R"}

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 鏈接數據庫,獲取庫,若是庫名存在,則使用,不存在建立
​
myquery = { "name": { "$regex": "^R" } }
mydoc = mycol.find(myquery)
for x in mydoc:
    print(x)

查詢結果排序,跳過,截取條數

若是咱們要對查詢結果設置指定條數的記錄能夠使用 limit() 方法

對結果排序經過sort()方法,對結果忽略某些結果用skip

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 鏈接數據庫,獲取庫,若是庫名存在,則使用,不存在建立
# 1.查詢結果的排序,跳過,和截取
sort_res = list(db.stu.find().sort("age", pymongo.DESCENDING))  # 查詢全部結果,並根據年齡的降序排序
skip_res = list(db.stu.find().skip(2))  # 查詢全部結果,並過濾掉前兩條
limit_res = list(db.stu.find().limit(2))  # 查詢全部結果,並截取前兩條顯示
# 2.分頁效果
pagination_res = list(db.stu.find().sort("age", pymongo.ASCENDING).limit(2).skip(2))

4.修改文檔

在 MongoDB 中使用 update_one() 方法修改文檔中的記錄。該方法第一個參數爲查詢的條件,第二個參數爲要修改的字段。

若是查找到的匹配數據多餘一條,則只會修改第一條。

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 鏈接數據庫,獲取庫,若是庫名存在,則使用,不存在建立
"""修改"""
# 方式一
# 查詢到直接更新設置值
res = db.stu.update_one({"name":"ryxiong"},{"$set":{"age":222}})
print(res.modified_count)
​
# 方式二.1
# 查到記錄,在字典中添加值
res = db.stu.find_one({"name":"ryxiong"})
res["gender"] = "male"
res["hobby"] = "photography"
res["name"] = "ryxiong1"
# 將值更新到記錄中去
res = db.stu.update_one({"name":"ryxiong"},{"$set":res})
print(res.modified_count)

5.刪除數據

刪除單挑

使用 delete_one() 方法來刪除一個文檔,該方法第一個參數爲查詢對象,指定要刪除哪些數據

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"] 
​
del_res1 = db.stu.delete_one({"name": "ryxiong"})  # 刪除知足條件的結果中的第一條
print(del_res1.deleted_count)

刪除多條

使用 delete_many() 方法來刪除多個文檔,該方法第一個參數爲查詢對象,指定要刪除哪些數據。

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"] 
​
query = { "name": {"$regex": "^F"} }
del_res = db.stu.delete_many(myquery)  # 刪除知足條件的多條
print(del_res.deleted_count)
​
# 刪除全部
del_res = db.stu.delete_many({})
相關文章
相關標籤/搜索