Mongodb 基本操作
生活随笔
收集整理的這篇文章主要介紹了
Mongodb 基本操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
mongo簡介
1.基于分布式文件存儲的數據庫。? 為 WEB應用提供可擴展的高性能數據存儲解決方案。
2.Mongo最大的特點是它支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,
幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
3. MongoDB的優勢
?
4. 下載和安裝步驟:點擊
mongdb 基本操作
?
1.數據庫操作
1 > use blog # 創建 或 切換到blog該數據庫下 2 switched to db blog 3 > show dbs 4 admin 0.000GB 5 config 0.000GB 6 local 0.000GB 7 test 0.000GB 8 > db.article.insert({"title":"西游記"}) # 插入文檔 9 WriteResult({ "nInserted" : 1 }) 10 > db.userinfo.insert({"name":"alex"}) 11 WriteResult({ "nInserted" : 1 }) 12 > show tables; # 展示 集合 (類似 表) 13 article 14 userinfo 15 > show dbs 16 admin 0.000GB 17 blog 0.000GB 18 config 0.000GB 19 local 0.000GB 20 test 0.000GB 21 > db.dropDatabase() # 刪庫 在哪個庫下就刪除哪個庫 22 { "dropped" : "blog", "ok" : 1 }?
2.集合操作
1 > use blog 2 switched to db blog 3 > db.article.insert({"title":"python"}) 4 WriteResult({ "nInserted" : 1 }) 5 > db.article.insert({"title":"linux"}) 6 WriteResult({ "nInserted" : 1 }) 7 > show tables; 8 article 9 > db.article.drop() 10 true 11 > show tables; 12 >?
3. 文檔操作
1.增??
關鍵字:
insert
insert_many
1 #1、沒有指定_id則默認ObjectId,_id不能重復,且在插入后不可變 2 3 #2、插入單條 4 user0={ 5 "name":"egon", 6 "age":10, 7 'hobbies':['music','read','dancing'], 8 'addr':{ 9 'country':'China', 10 'city':'BJ' 11 } 12 } 13 14 db.test.insert(user0) 15 db.test.find() 16 17 #3、插入多條 18 user1={ 19 "_id":1, 20 "name":"alex", 21 "age":10, 22 'hobbies':['music','read','dancing'], 23 'addr':{ 24 'country':'China', 25 'city':'weifang' 26 } 27 } 28 29 user2={ 30 "_id":2, 31 "name":"wupeiqi", 32 "age":20, 33 'hobbies':['music','read','run'], 34 'addr':{ 35 'country':'China', 36 'city':'hebei' 37 } 38 } 39 40 41 user3={ 42 "_id":3, 43 "name":"yuanhao", 44 "age":30, 45 'hobbies':['music','drink'], 46 'addr':{ 47 'country':'China', 48 'city':'heibei' 49 } 50 } 51 52 user4={ 53 "_id":4, 54 "name":"jingliyang", 55 "age":40, 56 'hobbies':['music','read','dancing','tea'], 57 'addr':{ 58 'country':'China', 59 'city':'BJ' 60 } 61 } 62 63 user5={ 64 "_id":5, 65 "name":"jinxin", 66 "age":50, 67 'hobbies':['music','read',], 68 'addr':{ 69 'country':'China', 70 'city':'henan' 71 } 72 } 73 db.user.insertMany([user1,user2,user3,user4,user5]) 74 db.user.find()2.查
find??
1?###################### (1)?比較運算?###################################2 3 # SQL:=,!=,>,<,>=,<= 4 # MongoDB:{key:value}代表什么等于什么,"$ne","$gt","$lt","gte","lte",其中"$ne"能用于所有數據類型 5 6 #1、select * from db1.user where name = "alex"; 7 db.user.find({'name':'alex'}) 8 9 #2、select * from db1.user where name != "alex"; 10 db.user.find({'name':{"$ne":'alex'}}) 11 12 #3、select * from db1.user where id > 2; 13 db.user.find({'_id':{'$gt':2}}) 14 15 #4、select * from db1.user where id < 3; 16 db.user.find({'_id':{'$lt':3}}) 17 18 #5、select * from db1.user where id >= 2; 19 db.user.find({"_id":{"$gte":2,}}) 20 21 #6、select * from db1.user where id <= 2; 22 db.user.find({"_id":{"$lte":2}}) 23 24 ###################### (2) 邏輯運算 ################################### 25 26 # SQL:and,or,not 27 # MongoDB:字典中逗號分隔的多個條件是and關系,"$or"的條件放到[]內,"$not" 28 29 #1、select * from db1.user where id >= 2 and id < 4; 30 db.user.find({'_id':{"$gte":2,"$lt":4}}) 31 32 #2、select * from db1.user where id >= 2 and age < 40; 33 db.user.find({"_id":{"$gte":2},"age":{"$lt":40}}) 34 35 #3、select * from db1.user where id >= 5 or name = "alex"; 36 db.user.find({ 37 "$or":[ 38 {'_id':{"$gte":5}}, 39 {"name":"alex"} 40 ] 41 }) 42 #4、select * from db1.user where id % 2=1; 43 db.user.find({'_id':{"$mod":[2,1]}}) 44 45 #5、上題,取反 46 db.user.find({'_id':{"$not":{"$mod":[2,1]}}})
47 ###################### (3) 成員運算 ################################### 48 49 # SQL:in,not in 50 # MongoDB:"$in","$nin" 51 52 #1、select * from db1.user where age in (20,30,31); 53 db.user.find({"age":{"$in":[20,30,31]}}) 54 55 #2、select * from db1.user where name not in ('alex','yuanhao'); 56 db.user.find({"name":{"$nin":['alex','yuanhao']}}) 57 58 ###################### (4) 正則匹配 ################################### 59 60 # SQL: regexp 正則 61 # MongoDB: /正則表達/i 62 63 #1、select * from db1.user where name regexp '^j.*?(g|n)$'; 64 db.user.find({'name':/^j.*?(g|n)$/i}) 65 66 67 ###################### (5) 取指定字段 ################################### 68 69 #1、select name,age from db1.user where id=3; 70 db.user.find({'_id':3},{''name':1,'age':1}) # name:1 表示顯示名字,name:0表示不顯示名字,age同理。 71 #2 db.user.find({'_id':3},{"addr":0}) 72 { "_id" : 3, "name" : "yuanhao", "age" : 30, "hobbies" : [ "music", "drink" ] } 73 74 ###################### (6) 查詢數組 ################################### 75
查詢格式 :find({t條件},{需要的結果})
76 #1、查看有dancing愛好的人 77 db.user.find({'hobbies':'dancing'}) 78 79 #2、查看既有dancing愛好又有tea愛好的人 80 db.user.find({ 81 'hobbies':{ 82 "$all":['dancing','tea'] 83 } 84 }) 85 86 #3、查看第4個愛好為tea的人 87 db.user.find({"hobbies.3":'tea'}) 88 89 #4、查看所有人最后兩個愛好 90 db.user.find({},{'hobbies':{"$slice":-2},"age":0,"_id":0,"name":0,"addr":0}) 91 92 #5、查看所有人的第2個到第3個愛好 93 db.user.find({},{'hobbies':{"$slice":[1,2]},"age":0,"_id":0,"name":0,"addr":0}) 94 95 96 ###################### (7) 排序 ################################### 97 98 # 排序:--1代表升序,-1代表降序 99 db.user.find().sort({"name":1,}) 100 db.user.find().sort({"age":-1,'_id':1}) 101 102 ###################### (8) 分頁 ################################### 103 104 # 分頁:--limit代表取多少個document,skip代表跳過前多少個document。 105 db.user.find().sort({'age':1}).limit(1).skip(2) 106 107 ###################### (9) 查詢數量 ################################### 108 # 獲取數量 109 db.user.count({'age':{"$gt":30}}) 110 111 --或者 112 db.user.find({'age':{"$gt":30}}).count() 113 114 ###################### (10) 其它 ################################### 115 116 #1、{'key':null} 匹配key的值為null或者沒有這個key 117 db.t2.insert({'a':10,'b':111}) 118 db.t2.insert({'a':20}) 119 db.t2.insert({'b':null}) 120 121 > db.t2.find({"b":null}) 122 { "_id" : ObjectId("5a5cc2a7c1b4645aad959e5a"), "a" : 20 } 123 { "_id" : ObjectId("5a5cc2a8c1b4645aad959e5b"), "b" : null } 124 125 #2、查找所有 126 db.user.find() #等同于db.user.find({}) 127 db.user.find().pretty() # 結構化顯示 128 129 #3、查找一個,與find用法一致,只是只取匹配成功的第一個 130 db.user.findOne({"_id":{"$gt":3}})
3.修改文檔? ?update
1 ############################## 1 update的語法 ############################## 2 3 update() 方法用于更新已存在的文檔。語法格式如下: 4 db.collection.update( 5 <query>, 6 <update>, 7 { 8 upsert: <boolean>, 9 multi: <boolean>, 10 writeConcern: <document> 11 } 12 ) 13 參數說明:對比update db1.t1 set name='EGON',sex='Male' where name='egon' and age=18; 14 15 query : 相當于where條件。 16 update : update的對象和一些更新的操作符(如$,$inc...等,相當于set后面的 17 upsert : 可選,默認為false,代表如果不存在update的記錄不更新也不插入,設置為true代表插入。 18 multi : 可選,默認為false,代表只更新找到的第一條記錄,設為true,代表更新找到的全部記錄。 19 writeConcern :可選,拋出異常的級別。 20 21 更新操作是不可分割的:若兩個更新同時發送,先到達服務器的先執行,然后執行另外一個,不會破壞文檔。 22 23 ############################## 2 覆蓋更新 ############################## 24 25 #注意:除非是刪除,否則_id是始終不會變的 26 #1 : 27 db.user.update({'age':20},{"name":"Wxx","hobbies_count":3}) 28 是用{"_id":2,"name":"Wxx","hobbies_count":3}覆蓋原來的記錄 29 30 #2、一種最簡單的更新就是用一個新的文檔完全替換匹配的文檔。這適用于大規模式遷移的情況。例如 31 var obj=db.user.findOne({"_id":2}) 32 33 obj.username=obj.name+'SB' 34 obj.hobbies_count++ 35 delete obj.age 36 37 db.user.update({"_id":2},obj) 38 39 ############################## 3 局部更新 ############################## 40 41 #設置:$set 42 43 通常文檔只會有一部分需要更新。可以使用原子性的更新修改器,指定對文檔中的某些字段進行更新。 44 更新修改器是種特殊的鍵,用來指定復雜的更新操作,比如修改、增加后者刪除 45 46 #1、update db1.user set name="WXX" where id = 2 47 db.user.update({'_id':2},{"$set":{"name":"WXX",}}) 48 49 #2、沒有匹配成功則新增一條{"upsert":true} 50 db.user.update({'_id':6},{"$set":{"name":"egon","age":18}},{"upsert":true}) 51 52 #3、默認只改匹配成功的第一條,{"multi":改多條} 53 db.user.update({'_id':{"$gt":4}},{"$set":{"age":28}}) 54 db.user.update({'_id':{"$gt":4}},{"$set":{"age":38}},{"multi":true}) 55 56 #4、修改內嵌文檔,把名字為alex的人所在的地址國家改成Japan 57 db.user.update({'name':"alex"},{"$set":{"addr.country":"Japan"}}) 58 59 #5、把名字為alex的人的地2個愛好改成piao 60 db.user.update({'name':"alex"},{"$set":{"hobbies.1":"piao"}}) 61 62 #6、刪除alex的愛好,$unset 63 db.user.update({'name':"alex"},{"$unset":{"hobbies":""}}) 64 65 ############################## 4 自增或自減 ############################## 66 67 #增加和減少:$inc 68 69 #1、所有人年齡增加一歲 70 db.user.update({}, 71 { 72 "$inc":{"age":1} 73 }, 74 { 75 "multi":true # 多個 ,false 一個 76 } 77 ) 78 #2、所有人年齡減少5歲 79 db.user.update({}, 80 { 81 "$inc":{"age":-5} 82 }, 83 { 84 "multi":true 85 } 86 ) 87 88 89 ############################## 5 添加刪除數組內元素 ############################## 90 91 #添加刪除數組內元素:$push,$pop,$pull 92 93 往數組內添加元素:$push 94 #1、為名字為yuanhao的人添加一個愛好read 95 db.user.update({"name":"yuanhao"},{"$push":{"hobbies":"read"}}) 96 97 #2、為名字為yuanhao的人一次添加多個愛好tea,dancing 98 db.user.update({"name":"yuanhao"},{"$push":{ 99 "hobbies":{"$each":["tea","dancing"]} 100 }}) 101 102 按照位置且只能從開頭或結尾刪除元素:$pop 103 #3、{"$pop":{"key":1}} 從數組末尾刪除一個元素 104 105 db.user.update({"name":"yuanhao"},{"$pop":{ 106 "hobbies":1} 107 }) 108 109 #4、{"$pop":{"key":-1}} 從頭部刪除 110 db.user.update({"name":"yuanhao"},{"$pop":{ 111 "hobbies":-1} 112 }) 113 114 #5、按照條件刪除元素,:"$pull" 把符合條件的統統刪掉,而$pop只能從兩端刪 115 db.user.update({'addr.country':"China"},{"$pull":{ 116 "hobbies":"read"} 117 }, 118 { 119 "multi":true 120 } 121 ) 122 123 124 ############################## 6 避免重復添加 ############################## 125 126 #避免添加重復:"$addToSet" 127 128 db.urls.insert({"_id":1,"urls":[]}) 129 130 db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}}) 131 db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}}) 132 db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}}) 133 134 db.urls.update({"_id":1},{ 135 "$addToSet":{ 136 "urls":{ 137 "$each":[ 138 'http://www.baidu.com', 139 'http://www.baidu.com', 140 'http://www.xxxx.com' 141 ] 142 } 143 } 144 } 145 ) 146 147 ############################## 7 其它 ############################## 148 149 #1、了解:限制大小"$slice",只留最后n個 150 151 db.user.update({"_id":5},{ 152 "$push":{"hobbies":{ 153 "$each":["read",'music','dancing'], # 循環 154 "$slice":-2 # 切片,最后2個 155 } 156 } 157 }) 158 159 #2、了解:排序The $sort element value must be either 1 or -1" 160 db.user.update({"_id":5},{ 161 "$push":{"hobbies":{ 162 "$each":["read",'music','dancing'], 163 "$slice":-1, 164 "$sort":-1 165 } 166 } 167 }) 168 169 #注意:不能只將"$slice"或者"$sort"與"$push"配合使用,且必須使用"$eah"?
?
4 刪除文檔
1 #1、刪除多個中的第一個 2 db.user.deleteOne({ 'age': 8 }) 3 4 #2、刪除國家為China的全部 5 db.user.deleteMany( {'addr.country': 'China'} ) 6 7 #3、刪除全部 8 db.user.deleteMany({})pymongo
pymongo的基礎
1、安裝? :
pip3 install pymongo2.先啟動mongo服務:
windows系統下:進入 MongoDB安裝目錄的bin 目錄下,在該目錄下打開cmd 窗口? 輸入:mongod.exe? ? 后 回車,開啟服務。
3. pycharm 中:
import pymongo# 1.連接 mongodb 服務
client= pymongo.MongoClient(host='localhost',port=27017) 27017 為MongoDB 的默認端口 # 2. 連接數據庫名為test ,如果該數據庫不存在,則自動創建 db=client["test"] # 3. 創建集合( 類似 表 ) 集合名為students collection=db.studentsstudent={'id': '20170101','name': 'Jordan','age': 20,'gender': 'male' }# 4 插入一個文檔 # result=collection.insert(student)# result=collection.insert_one(student) # print(result)
?
pymongo的詳細操作
""" MongoDB存儲在這里我們來看一下Python3下MongoDB的存儲操作,在本節開始之前請確保你已經安裝好了MongoDB并啟動了其服務,另外安裝好了Python的PyMongo庫。連接MongoDB連接MongoDB我們需要使用PyMongo庫里面的MongoClient,一般來說傳入MongoDB的IP及端口即可,第一個參數為地址host,第二個參數為端口port,端口如果不傳默認是27017。 """<br> import pymongo client = pymongo.MongoClient(host='localhost', port=27017)<br> """ 這樣我們就可以創建一個MongoDB的連接對象了。另外MongoClient的第一個參數host還可以直接傳MongoDB的連接字符串,以mongodb開頭, 例如:client = MongoClient('mongodb://localhost:27017/')可以達到同樣的連接效果。<br> """ # 指定數據庫 # MongoDB中還分為一個個數據庫,我們接下來的一步就是指定要操作哪個數據庫,在這里我以test數據庫為例進行說明,所以下一步我們 # 需要在程序中指定要使用的數據庫。 db = client.test # 調用client的test屬性即可返回test數據庫,當然也可以這樣來指定: # db = client['test'] # 兩種方式是等價的。# 指定集合 # MongoDB的每個數據庫又包含了許多集合Collection,也就類似與關系型數據庫中的表,下一步我們需要指定要操作的集合, # 在這里我們指定一個集合名稱為students,學生集合。還是和指定數據庫類似,指定集合也有兩種方式。 collection = db.students # collection = db['students'] # 插入數據,接下來我們便可以進行數據插入了,對于students這個Collection,我們新建一條學生數據,以字典的形式表示: student = {'id': '20170101','name': 'Jordan','age': 20,'gender': 'male' } # 在這里我們指定了學生的學號、姓名、年齡和性別,然后接下來直接調用collection的insert()方法即可插入數據。 result = collection.insert(student) print(result) # 在MongoDB中,每條數據其實都有一個_id屬性來唯一標識,如果沒有顯式指明_id,MongoDB會自動產生一個ObjectId類型的_id屬性。 # insert()方法會在執行后返回的_id值。# 運行結果: # 5932a68615c2606814c91f3d # 當然我們也可以同時插入多條數據,只需要以列表形式傳遞即可,示例如下: student1 = {'id': '20170101','name': 'Jordan','age': 20,'gender': 'male' }student2 = {'id': '20170202','name': 'Mike','age': 21,'gender': 'male' }result = collection.insert([student1, student2]) print(result) # 返回的結果是對應的_id的集合,運行結果: # [ObjectId('5932a80115c2606a59e8a048'), ObjectId('5932a80115c2606a59e8a049')] # 實際上在PyMongo 3.X版本中,insert()方法官方已經不推薦使用了,當然繼續使用也沒有什么問題, # 官方推薦使用insert_one()和insert_many()方法將插入單條和多條記錄分開。 student = {'id': '20170101','name': 'Jordan','age': 20,'gender': 'male' }result = collection.insert_one(student) print(result) print(result.inserted_id) # 運行結果: # <pymongo.results.InsertOneResult object at 0x10d68b558> # 5932ab0f15c2606f0c1cf6c5 # 返回結果和insert()方法不同,這次返回的是InsertOneResult對象,我們可以調用其inserted_id屬性獲取_id。# 對于insert_many()方法,我們可以將數據以列表形式傳遞即可,示例如下: student1 = {'id': '20170101','name': 'Jordan','age': 20,'gender': 'male' }student2 = {'id': '20170202','name': 'Mike','age': 21,'gender': 'male' }result = collection.insert_many([student1, student2]) print(result) print(result.inserted_ids) # insert_many()方法返回的類型是InsertManyResult,調用inserted_ids屬性可以獲取插入數據的_id列表,運行結果:# <pymongo.results.InsertManyResult object at 0x101dea558> # [ObjectId('5932abf415c2607083d3b2ac'), ObjectId('5932abf415c2607083d3b2ad')] # 查詢,插入數據后我們可以利用find_one()或find()方法進行查詢,find_one()查詢得到是單個結果,find()則返回多個結果。 result = collection.find_one({'name': 'Mike'}) print(type(result)) print(result) # 在這里我們查詢name為Mike的數據,它的返回結果是字典類型,運行結果: # <class'dict'> # {'_id': ObjectId('5932a80115c2606a59e8a049'), 'id': '20170202', 'name': 'Mike', 'age': 21, 'gender': 'male'} # 可以發現它多了一個_id屬性,這就是MongoDB在插入的過程中自動添加的。# 我們也可以直接根據ObjectId來查詢,這里需要使用bson庫里面的ObjectId。from bson.objectid import ObjectIdresult = collection.find_one({'_id': ObjectId('593278c115c2602667ec6bae')}) print(result) # 其查詢結果依然是字典類型,運行結果:# {' ObjectId('593278c115c2602667ec6bae'), 'id': '20170101', 'name': 'Jordan', 'age': 20, 'gender': 'male'} # 當然如果查詢_id':結果不存在則會返回None。# 對于多條數據的查詢,我們可以使用find()方法,例如在這里查找年齡為20的數據,示例如下: results = collection.find({'age': 20}) print(results) for result in results:print(result) # 運行結果:# <pymongo.cursor.Cursor object at 0x1032d5128> # {'_id': ObjectId('593278c115c2602667ec6bae'), 'id': '20170101', 'name': 'Jordan', 'age': 20, 'gender': 'male'} # {'_id': ObjectId('593278c815c2602678bb2b8d'), 'id': '20170102', 'name': 'Kevin', 'age': 20, 'gender': 'male'} # {'_id': ObjectId('593278d815c260269d7645a8'), 'id': '20170103', 'name': 'Harden', 'age': 20, 'gender': 'male'} # 返回結果是Cursor類型,相當于一個生成器,我們需要遍歷取到所有的結果,每一個結果都是字典類型。# 如果要查詢年齡大于20的數據,則寫法如下: results = collection.find({'age': {'$gt': 20}}) # 在這里查詢的條件鍵值已經不是單純的數字了,而是一個字典,其鍵名為比較符號$gt,意思是大于,鍵值為20,這樣便可以查詢出所有 # 年齡大于20的數據。# 在這里將比較符號歸納如下表: """ 符號含義示例 $lt小于{'age': {'$lt': 20}} $gt大于{'age': {'$gt': 20}} $lte小于等于{'age': {'$lte': 20}} $gte大于等于{'age': {'$gte': 20}} $ne不等于{'age': {'$ne': 20}} $in在范圍內{'age': {'$in': [20, 23]}} $nin不在范圍內{'age': {'$nin': [20, 23]}} """ # 另外還可以進行正則匹配查詢,例如查詢名字以M開頭的學生數據,示例如下: results = collection.find({'name': {'$regex': '^M.*'}}) # 在這里使用了$regex來指定正則匹配,^M.*代表以M開頭的正則表達式,這樣就可以查詢所有符合該正則的結果。# 在這里將一些功能符號再歸類如下: """ 符號含義示例示例含義 $regex匹配正則{'name': {'$regex': '^M.*'}}name以M開頭 $exists屬性是否存在{'name': {'$exists': True}}name屬性存在 $type類型判斷{'age': {'$type': 'int'}}age的類型為int $mod數字模操作{'age': {'$mod': [5, 0]}}年齡模5余0 $text文本查詢{'$text': {'$search': 'Mike'}}text類型的屬性中包含Mike字符串 $where高級條件查詢{'$where': 'obj.fans_count == obj.follows_count'}自身粉絲數等于關注數 """ # 這些操作的更詳細用法在可以在MongoDB官方文檔找到: # https://docs.mongodb.com/manual/reference/operator/query/# 計數 # 要統計查詢結果有多少條數據,可以調用count()方法,如統計所有數據條數: count = collection.find().count() print(count) # 或者統計符合某個條件的數據: count = collection.find({'age': 20}).count() print(count) # 排序 # 可以調用sort方法,傳入排序的字段及升降序標志即可,示例如下: results = collection.find().sort('name', pymongo.ASCENDING) print([result['name'] for result in results]) # 運行結果:# ['Harden', 'Jordan', 'Kevin', 'Mark', 'Mike'] # 偏移,可能想只取某幾個元素,在這里可以利用skip()方法偏移幾個位置,比如偏移2,就忽略前2個元素,得到第三個及以后的元素。 results = collection.find().sort('name', pymongo.ASCENDING).skip(2) print([result['name'] for result in results]) # 運行結果: # ['Kevin', 'Mark', 'Mike'] # 另外還可以用limit()方法指定要取的結果個數,示例如下: results = collection.find().sort('name', pymongo.ASCENDING).skip(2).limit(2) print([result['name'] for result in results]) # 運行結果: # ['Kevin', 'Mark'] # 如果不加limit()原本會返回三個結果,加了限制之后,會截取2個結果返回。# 值得注意的是,在數據庫數量非常龐大的時候,如千萬、億級別,最好不要使用大的偏移量來查詢數據,很可能會導致內存溢出, # 可以使用類似find({'_id': {'$gt': ObjectId('593278c815c2602678bb2b8d')}}) 這樣的方法來查詢,記錄好上次查詢的_id。# 更新 # 對于數據更新可以使用update()方法,指定更新的條件和更新后的數據即可,例如: condition = {'name': 'Kevin'} student = collection.find_one(condition) student['age'] = 25 result = collection.update(condition, student) print(result) # 在這里我們將name為Kevin的數據的年齡進行更新,首先指定查詢條件,然后將數據查詢出來,修改年齡, # 之后調用update方法將原條件和修改后的數據傳入,即可完成數據的更新。# 運行結果:# {'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True} # 返回結果是字典形式,ok即代表執行成功,nModified代表影響的數據條數。# 另外update()方法其實也是官方不推薦使用的方法,在這里也分了update_one()方法和update_many()方法,用法更加嚴格, # 第二個參數需要使用$類型操作符作為字典的鍵名,我們用示例感受一下。 condition = {'name': 'Kevin'} student = collection.find_one(condition) student['age'] = 26 result = collection.update_one(condition, {'$set': student}) print(result) print(result.matched_count, result.modified_count) # 在這里調用了update_one方法,第二個參數不能再直接傳入修改后的字典,而是需要使用{'$set': student}這樣的形式, # 其返回結果是UpdateResult類型,然后調用matched_count和modified_count屬性分別可以獲得匹配的數據條數和影響的數據條數。# 運行結果: # # <pymongo.results.UpdateResult object at 0x10d17b678> # 1 0 # 我們再看一個例子: condition = {'age': {'$gt': 20}} result = collection.update_one(condition, {'$inc': {'age': 1}}) print(result) print(result.matched_count, result.modified_count) # 在這里我們指定查詢條件為年齡大于20,然后更新條件為{'$inc': {'age': 1}},執行之后會講第一條符合條件的數據年齡加1。# 運行結果: # # <pymongo.results.UpdateResult object at 0x10b8874c8> # 1 1 # 可以看到匹配條數為1條,影響條數也為1條。# 如果調用update_many()方法,則會將所有符合條件的數據都更新,示例如下: condition = {'age': {'$gt': 20}} result = collection.update_many(condition, {'$inc': {'age': 1}}) print(result) print(result.matched_count, result.modified_count) # 這時候匹配條數就不再為1條了,運行結果如下: # # <pymongo.results.UpdateResult object at 0x10c6384c8> # 3 3 # 可以看到這時所有匹配到的數據都會被更新。# 刪除 # 刪除操作比較簡單,直接調用remove()方法指定刪除的條件即可,符合條件的所有數據均會被刪除,示例如下: result = collection.remove({'name': 'Kevin'}) print(result) # 運行結果: # # {'ok': 1, 'n': 1} # 另外依然存在兩個新的推薦方法,delete_one()和delete_many()方法,示例如下: result = collection.delete_one({'name': 'Kevin'}) print(result) print(result.deleted_count) result = collection.delete_many({'age': {'$lt': 25}}) print(result.deleted_count) # 運行結果:# <pymongo.results.DeleteResult object at 0x10e6ba4c8> # 1 # 4 # delete_one()即刪除第一條符合條件的數據,delete_many()即刪除所有符合條件的數據,返回結果是DeleteResult類型, # 可以調用deleted_count屬性獲取刪除的數據條數。# 更多 # 另外PyMongo還提供了一些組合方法,如find_one_and_delete()、find_one_and_replace()、find_one_and_update(), # 就是查找后刪除、替換、更新操作,用法與上述方法基本一致。# 另外還可以對索引進行操作,如create_index()、create_indexes()、drop_index()等。# 詳細用法可以參見官方文檔:http://api.mongodb.com/python/current/api/pymongo/collection.html?
更詳細操作:
官方文檔:http://api.mongodb.com/python/current/api/pymongo/?
轉載于:https://www.cnblogs.com/knighterrant/p/10481545.html
總結
以上是生活随笔為你收集整理的Mongodb 基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《剑指offer》第十三题(机器人的运动
- 下一篇: 农村有前景的创业项目 选择很多要挑好的