日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

mongodb python 大于_Python中使用MongoDB详解

發布時間:2024/7/5 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mongodb python 大于_Python中使用MongoDB详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:Zarten知乎專欄:Python爬蟲深入詳解知乎ID: Zarten簡介: 互聯網一線工作者,尊重原創并歡迎評論留言指出不足之處,也希望多些關注和點贊是給作者最好的鼓勵 !

介紹

MongoDB是一種面向文檔型的非關系型數據庫(NoSQL),由C++編寫。非關系數據庫中是以鍵值對存儲,結構不固定,易存儲,減少時間和空間的開銷。文檔型數據庫通常是以JSON或XML格式存儲數據,而Mongodb使用的數據結構是BSON(二進制JSON),和JSON相比,BSON提高了存儲和掃描效率,但空間占用會更多一些。

在python中操作MongoDB,我們使用PyMongo,下面著重介紹。

PyMongo的使用

前提:安裝了MongoDB服務器,若沒有,點擊這里安裝

1.安裝

pip3 install pymongo

2.連接

  • 第1種方式:
#無密碼連接 import pymongo mongo_client = pymongo.MongoClient('127.0.0.1', 27017)#有密碼連接 import pymongo mongo_client = pymongo.MongoClient('127.0.0.1', 26666) mongo_auth = mongo_client.admin #或 mongo_client['admin'] admin為authenticationDatabase mongo_auth.authenticate('用戶名', '密碼')
  • 第2種方式:
#無密碼連接 import pymongo mongo_client = pymongo.MongoClient('mongodb://127.0.0.1:27017')#有密碼連接 import pymongo import urllib.parse mongo_username = urllib.parse.quote_plus('你的用戶名') mongo_password = urllib.parse.quote_plus('密碼') mongo_client = pymongo.MongoClient('mongodb://%s:%s@127.0.0.1:26666' % (mongo_username, mongo_password)) print(mongo_client.server_info()) #判斷是否連接成功

判斷是否連接成功:

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.你的collection

CURD操作

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查詢數據插入時間排序
col.find().sort('_id',-1) #根據插入時間降序
  • 根據_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详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。