mongodb python 大于_Python中使用MongoDB详解
介紹
MongoDB是一種面向文檔型的非關系型數據庫(NoSQL),由C++編寫。非關系數據庫中是以鍵值對存儲,結構不固定,易存儲,減少時間和空間的開銷。文檔型數據庫通常是以JSON或XML格式存儲數據,而Mongodb使用的數據結構是BSON(二進制JSON),和JSON相比,BSON提高了存儲和掃描效率,但空間占用會更多一些。
在python中操作MongoDB,我們使用PyMongo,下面著重介紹。
PyMongo的使用
前提:安裝了MongoDB服務器,若沒有,點擊這里安裝
1.安裝
pip3 install pymongo2.連接
- 第1種方式:
- 第2種方式:
判斷是否連接成功:
print(mongo_client.server_info()) #判斷是否連接成功3.獲取Database 和 Collection
若沒有Database 和Collection,則會自動創建
第一種方式:
mongo_db = mongo_client['你的database'] mongo_collection = mongo_db['你的collection']第二種方式:
mongo_db = mongo_client.你的database mongo_collection = mongo_db.你的collectionCURD操作
4.插入單條數據 insert_one()
insert_one() 詳細說明參考
import datetime info = {'name' : 'Zarten','text' : 'Inserting a Document','tags' : ['a', 'b', 'c'],'date' : datetime.datetime.now() } mongo_collection.insert_one(info)5.插入多條數據 insert_many()
insert_many() 詳細說明參考
import datetime info_1 = {'name' : 'Zarten_1','text' : 'Inserting a Document','tags' : ['a', 'b', 'c'],'date' : datetime.datetime.now() }info_2 = {'name' : 'Zarten_2','text' : 'Inserting a Document','tags' : [1, 2, 3],'date' : datetime.datetime.now() }insert_list = [info_1, info_2] mongo_collection.insert_many(insert_list)6.插入字符串類型的時間
由上圖可以看到插入字符串時間時,mongodb自動轉成了 ISOdate類型,若需要時間在mongdb也是字符串類型,只需這樣操作即可
datetime.datetime.now().isoformat()7.刪除一條數據 delete_one()
delete_one() 詳細說明參考
刪除一條數據。若刪除條件相同匹配到多條數據,默認刪除第一條
刪除前的數據如下:
mongo_collection.delete_one({'text' : 'a'})刪除后的數據如下:
8.刪除多條數據 delete_many()
delete_many() 詳細說明參考
刪除滿足條件的所有數據
刪除前的數據如下:
mongo_collection.delete_many({'text' : 'a'})刪除后的數據如下:
9.更新單條數據 update_one()
update_one() 詳細說明參考
只會更新滿足條件的第一條數據
update_one(filter,update,upsert=False,bypass_document_validation=False,collation=None,array_filters=None,session=None)
- 第一個參數 filter:更新的條件
- 第二個參數 update : 更新的內容,必須用$操作符
- 第三個參數 upsert : 默認False。若為True,更新條件沒找到,則插入更新的內容
更新前的數據如下:
info = {'name': '桃子 ','text': 'peach','tags': [1, 2, 3],'date': datetime.datetime.now()} update_condition = {'name' : 'Zarten_2'} #更新的條件,也可以為多個條件 #更新條件多個時,需要同時滿足時才會更新 # update_condition = {'name' : 'Pear', # 'text' : '梨子'}mongo_collection.update_one(update_condition, {'$set' : info})更新后的數據:
10.更新多條數據 update_many()
update_many() 詳細說明參考
更新滿足條件的所有數據
更新前的數據如下:
info = {'name': 'Zarten','text': 'a','tags': [1, 2, 3],'date': datetime.datetime.now()} update_condition = {'text' : 'a'} #更新的條件 #更新條件多個時,需要同時滿足時才會更新 # update_condition = {'name' : 'Pear', # 'text' : '梨子'}mongo_collection.update_many(update_condition, {'$set' : info})11.更新時,若無滿足條件,則插入數據
update_one() 詳細說明參考
通過設置upsert為True即可
更新前的數據如下:
info = {'name': 'Banana','text': '香蕉','tags': [1, 2, 3],'date': datetime.datetime.now() } update_condition = {'text' : 'a'} #更新的條件 #更新條件多個時,需要同時滿足時才會更新 # update_condition = {'name' : 'Pear', # 'text' : '梨子'}mongo_collection.update_many(update_condition, {'$set' : info}, upsert= True)更新后的數據如下:
12.查詢一條數據 find_one()
find_one() 詳細說明
匹配第一條滿足的條件的結果,這條結果以dict字典形式返回,若沒有查詢到,則返回None
find_condition = {'name' : 'Banana','text' : 'peach' } find_result = mongo_collection.find_one(find_condition)可以通過projection參數來指定需要查詢的字段,包括是否顯示 _id ,更多具體用法參考 find()
find_condition = {'name' : 'Zarten_3', } select_item = mongo_collection.find_one(find_condition, projection= {'_id':False, 'name':True, 'num':True}) print(select_item)13.查詢范圍
查詢范圍具體參考這里
范圍查詢通常用$ 例如:$gte 大于等于 $lt 小于;具體的$符號在文章末尾查看
例如:查詢一段時間內的數據
import datetime find_condition = {'date' : {'$gte':datetime.datetime(2018,12,1), '$lt':datetime.datetime(2018,12,3)} } select_item = mongo_collection.find_one(find_condition) print(select_item)14.查詢多條數據 find()
find() 詳細說明
返回滿足條件的所有結果,返回類型為 Cursor ,通過迭代獲取每個查詢結果,每個結果類型為dict字典
find_condition = {'name' : 'Banana','text' : '香蕉' } find_result_cursor = mongo_collection.find(find_condition) for find_result in find_result_cursor:print(find_result)15.通過 _id 來查詢
查詢條件中_id 類型是ObjectId類型,也就是插入時返回的對象。
若 _id 提供的是str類型的,我們需要轉成ObjectId類型
from bson.objectid import ObjectId query_id_str = '5c00f60b20b531196c02d657' find_condition = {'_id' : ObjectId(query_id_str), } find_result = mongo_collection.find_one(find_condition) print(find_result)16.查詢一條數據同時刪除 find_one_and_delete()
find_one_and_delete(filter,projection=None,sort=None,session=None,**kwargs) 詳細說明
- filter:查詢條件
- projection:選擇返回和不返回的字段
- sort:list類型,當查詢匹配到多條數據時,根據某個條件排序,函數返回時返回第一條數據
只能返回一條數據
此函數的特別之處在于,它會返回被刪除的信息,以字典dict形式返回
刪除前的數據:
17.查詢并刪除,匹配單條數據
find_condition = {'name' : 'Banana', } deleted_item = mongo_collection.find_one_and_delete(find_condition) print(deleted_item)18.查詢并刪除,匹配多條數據,有選擇的返回某條數據
通過sort參數
find_condition = {'name' : 'Zarten_2', } deleted_item = mongo_collection.find_one_and_delete(find_condition, sort= [('num', pymongo.DESCENDING)]) print(deleted_item)刪除后的數據:
19.計數
count_documents() 詳細說明
注意:此函數在3.7版本添加,以下的版本無法使用,本人版本為3.6.3 固無法使用
find_condition = {'name' : 'Zarten_1' } select_count = mongo_collection.count_documents(find_condition) print(select_count)20.創建索引 create_index()
create_index() 詳細說明
插入數據時,已經有一個_id索引了,我們還可以自定義創建索引
參數 unique設置為True時,創建一個唯一索引,索引字段插入相同值時會自動報錯。默認為False,為False時可以插入相同值
mongo_collection.create_index('name', unique= True)21.獲取索引信息
list_indexes() 和 index_information() 詳細說明參考這里
# list_indexs = mongo_collection.list_indexes() # for index in list_indexs: # print(index)index_info = mongo_collection.index_information() print(index_info)由上圖可以看到:
索引的名稱自動作了處理,變成了別名 name_1
22.刪除索引 drop_index() 和 drop_indexes()
詳細參考這里
需要使用索引的別名,沒有則拋出錯誤
del_index = mongo_collection.drop_index('name_1') print(del_index)23.刪除集合 drop()
mongo_collection.drop()24.符號$參考表
Pymongo常用操作
- 根據_id查詢數據插入時間排序
- 根據_id查詢某個日期插入的數據
比如查詢今天插入的所有數據
import datetime from bson.objectid import ObjectIdtoday_zero = datetime.datetime.strptime(datetime.datetime.now().strftime("%Y-%m-%d"), "%Y-%m-%d") dummy_id = ObjectId.from_datetime(today_zero) results = col.find({"_id": {"$gte": dummy_id}}).limit(10) for result in results:print(result)比如查詢15天前的那天日期的所有插入數據
import datetime from bson.objectid import ObjectIdstart_day_time = datetime.datetime.today() - datetime.timedelta(15) end_day_time = datetime.datetime.today() - datetime.timedelta(14)start_day_zero = datetime.datetime.strptime(start_day_time.strftime("%Y-%m-%d"), "%Y-%m-%d") end_day_zero = datetime.datetime.strptime(end_day_time.strftime("%Y-%m-%d"), "%Y-%m-%d")start_dummy_id = ObjectId.from_datetime(start_day_zero) end_dummy_id = ObjectId.from_datetime(end_day_zero)results_count = col.find({"_id": {"$gte": start_dummy_id,"$lte":end_dummy_id}}).count() print(results_count)比如昨天插入數據
start_day_time = datetime.datetime.today() - datetime.timedelta(1) end_day_time = datetime.datetime.today() - datetime.timedelta(0)start_day_zero = datetime.datetime.strptime(start_day_time.strftime("%Y-%m-%d"), "%Y-%m-%d") end_day_zero = datetime.datetime.strptime(end_day_time.strftime("%Y-%m-%d"), "%Y-%m-%d")start_dummy_id = ObjectId.from_datetime(start_day_zero) end_dummy_id = ObjectId.from_datetime(end_day_zero)results_count = col.find({"_id": {"$gte": start_dummy_id,"$lte":end_dummy_id}}).count()print(results_count)總結
以上是生活随笔為你收集整理的mongodb python 大于_Python中使用MongoDB详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java script object_j
- 下一篇: websocket python爬虫_p