MongoDB是一個基於分佈式文件存儲的數據庫,是介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。python
https://blog.csdn.net/congcong68/article/details/44277469正則表達式
1 use blog #切換數據庫,沒有時會建立 3 show dbs #查看全部的數據庫(數據庫必須有數據纔會顯示) 5 db.dropDatabase() #刪除數據庫
集合就是至關於關係數據庫中的表mongodb
1 use blog #切換數據庫 2 db.article.insert({'title':'python'}) #建立集合article並插入數據,db指當前用的數據庫 3 show tables #查看集合(表) 4 db.article.drop() #刪除集合
文檔至關於關係數據庫中的記錄數據庫
一、添加文檔數組
1 user0 = {'name':'alex',...} 2 db.test.insert(user0) #插入單條 3 user1 = {...} 4 user2 = {...} 5 user3 = {...} 6 db.test.insertMany([user1,user2,user3]) #插入多條
二、查看文檔分佈式
1 db.user.find() #查看集合中全部文檔 2 db.user.find().pretty() #格式化展現輸出結果 3 db.user.findOne() #只取匹配成功的第一個 4 5 db.user.find({至關於where條件},{至關於select條件}) 6 7 ###########比較運算########## 8 '$gt','$lt','$gte','$lte','$ne' 分別表明大於、小於、大於等於、小於等於、不等於 9 10 db.user.find({'name':'alex'}) #查詢name等於alex的 11 12 db.user.find({'name':{"$ne":'alex'}}) # #查詢name不等於alex的 13 14 db.user.find({'_id':{'$gt':2}}) #id大於2的 15 16 db.user.find({"_id":{"$gte":2,}}) #id大於等於2的 17 18 19 ###########邏輯運算########## 20 '$or' 或;'$not' 非;字典中多個條件用逗號分隔是and關係 21 22 db.user.find({'_id':{"$gte":2,"$lt":4}} #id大於等於2,小於4的 23 db.user.find({"_id":{"$gte":2},"age":{"$lt":40}}) #id等於2,年齡小於40的 24 25 db.user.find({"$or":[{'_id':{"$gte":5}}, {"name":"alex"} ]}) #id大於等於5或name等於alex的 26 27 db.user.find({'_id':{"$mod":[2,1]}}) #id除以2餘數爲1的 28 29 db.user.find({'_id':{"$not":{"$mod":[2,1]}}}) #id除以2餘數爲1的 30 取反 31 32 ###########成員運算########## 33 db.user.find({'age':{'$in':[20,30,31]}}) #in 34 35 db.user.find({'age':{'$nin':[20,30]}}) # not in 36 37 38 ###########正則匹配########## 39 /正則表達式/i ,i表示模式 40 db.user.find({'name':/^j.*?(g|n)$/i}) 41 42 ###########取指定的字段########## 43 44 db.user.find({'_id':3},{''name':1,'age':1}) #1表示取,0表示不取 45 注意:{''name':1,'age':1},字典內要麼都是1,要麼都是0,不能既有1又有0,可是'_id'除外 46 47 ###########查詢數組########## 48 直接用點取值 49 50 db.user.find({'hobbies':'dancing'}) #查詢hobbies對應列表中有dancing的人 51 db.user.find({"hobbies.3":'tea'}) #查詢hobbies對應列表的第四個值爲tea的 52 53 db.user.find({},{'hobbies':{"$slice":-2})#查詢全部人最後兩個愛好 54 55 ###########排序########## 56 57 db.user.find().sort({"age":-1,'_id':1}) # 1表明升序,-1表明降序 58 59 ###########分頁########## 60 61 db.user.find().sort({'age':1}).limit(1).skip(2) #limit表明取多少個,skip表明跳過前面多少個 62 63 ###########統計數量########## 64 65 db.user.count({'age':{"$gt":30}}) 66 或 db.user.find({'age':{"$gt":30}}).count() 67 68 ###########其餘########## 69 {'key':null} 匹配key的值爲null或者沒有這個key 70 71 db.t2.find({"b":null}) #b爲null或沒有b的
三、更新文檔url
1 ######### update()方法 ####### 2 3 對比update db1.t1 set name='EGON',sex='Male' where name='egon' and age=18; 4 5 update() 方法用於更新已存在的文檔。語法格式以下: 6 db.collection.update( 7 <query>, //查詢條件,至關於where 8 <update>, //update的對象和一些更新的操做符,至關於set 9 { 10 upsert: <boolean>, //可選,默認false,表明不存在update的記錄不更新也不插入,設爲true,表示插入 11 multi: <boolean>, // 可選,默認false,表明只更新找到的第一條几錄,設爲true,表明更新所有 12 writeConcern: <document> //可選,拋出異常的級別 13 } 14 )
1 #########覆蓋更新####### 2 用新的文檔替換匹配的文檔 3 db.user.update({'age':20},{"name":"Wxx","hobbies_count":3})#是用{"_id":2,"name":"Wxx","hobbies_count":3}覆蓋原來的記錄 4 5 #########局部更新####### 6 只更新文檔的一部份內容 7 8 db.user.update({'_id':6},{"$set":{"name":"egon","age":18}},{"upsert":true}) #沒匹配成功會新插入一條 9 10 db.user.update({'_id':{"$gt":4}},{"$set":{"age":38}},{"multi":true}) #更新多條 11 12 #########自增自減####### 13 db.user.update({},{ "$inc":{"age":1}}, { "multi":true }) #全部人年齡加一歲 14 db.user.update({},{ "$inc":{"age":-1}}, { "multi":true }) #全部人年齡減一歲 15 16 #########添加刪除數組內的元素####### 17 添加刪除數組內元素:$push,$pop,$pull 18 19 #一、爲名字爲yuanhao的人添加一個愛好read 20 db.user.update({"name":"yuanhao"},{"$push":{"hobbies":"read"}}) 21 22 #二、爲名字爲yuanhao的人一次添加多個愛好tea,dancing 23 db.user.update({"name":"yuanhao"},{"$push":{ 24 "hobbies":{"$each":["tea","dancing"]} 25 }}) 26 27 按照位置且只能從開頭或結尾刪除元素:$pop 28 #三、{"$pop":{"key":1}} 從數組末尾刪除一個元素 29 30 db.user.update({"name":"yuanhao"},{"$pop":{ 31 "hobbies":1} 32 }) 33 34 #四、{"$pop":{"key":-1}} 從頭部刪除 35 db.user.update({"name":"yuanhao"},{"$pop":{ 36 "hobbies":-1} 37 }) 38 39 #五、按照條件刪除元素,:"$pull" 把符合條件的通通刪掉,而$pop只能從兩端刪 40 db.user.update({'addr.country':"China"},{"$pull":{ 41 "hobbies":"read"}},{ "multi":true}) 42 43 #########避免重複添加####### 44 "$addToSet" 45 46 db.urls.insert({"_id":1,"urls":[]}) 47 48 #下面只會添加一次 49 db.urls.update({"_id":1},{"$addToSet":{'urls':'http://baidu'}}) 50 db.urls.update({"_id":1},{"$addToSet":{'urls':'http://baidu'}})
四、刪除文檔spa
1 #一、刪除多箇中的第一個 2 db.user.deleteOne({ 'age': 8 }) 3 4 #二、刪除國家爲China的所有 5 db.user.deleteMany( {'addr.country': 'China'} ) 6 7 #三、刪除所有 8 db.user.deleteMany({})
基本使用:.net
#插入單個文檔 result = collection.insert(student) print(result) #插入多個文檔 result = collection.insert([student1, student2]) print(result) # 實際上在PyMongo 3.X版本中,insert()方法官方已經不推薦使用了,固然繼續使用也沒有什麼問題, # 官方推薦使用insert_one()和insert_many()方法將插入單條和多條記錄分開。
1 import pymongo 2 3 client = pymongo.MongoClient(host='localhost',port=27017) 4 5 #指定數據庫 6 db = client.blog 7 print(db) 8 #指定集合 9 collection = db.user 10 #查詢多個 11 # for el in collection.find(): 12 # print(el) 13 14 #只返回查詢到的第一個結果 15 # result = collection.find_one({'age':{'$gt':10}}) 16 # print(result) 17 18 19 #使用正則查詢 20 res = collection.find({'name':{'$regex':'^w.*'}}) 21 # for el in res: 22 # print(el) 23 24 #計數 25 count = collection.find().count() 26 print(count) 27 28 #排序 多個條件 29 ret = collection.find().sort([('name',pymongo.ASCENDING),('age',pymongo.DESCENDING)]) 30 for el in ret: 31 print(el)
1 #對於數據更新可使用update()方法,指定更新的條件和更新後的數據便可 2 condition = {'name': 'Kevin'} 3 student = collection.find_one(condition) 4 student['age'] = 25 5 result = collection.update(condition, student) 6 print(result) 7 8 #update()方法其實也是官方不推薦使用的方法,在這裏也分了#update_one()方法和update_many()方法,用法更加嚴格, 9 # 第二個參數須要使用$類型操做符做爲字典的鍵名 10 condition = {'name': 'Kevin'} 11 student = collection.find_one(condition) 12 student['age'] = 26 13 result = collection.update_one(condition, {'$set': student}) 14 print(result) 15 print(result.matched_count, result.modified_count) 16 # 在這裏調用了update_one方法,第二個參數不能再直接傳入修改後的字典,而是須要使用{'$set': student}這樣的形式, 17 # 其返回結果是UpdateResult類型,而後調用matched_count和modified_count屬性分別能夠得到匹配的數據條數和影響的數據條數。 18 19 # 運行結果: 20 # <pymongo.results.UpdateResult object at 0x10d17b678> 21 # 1 0 22 23 condition = {'age': {'$gt': 20}} 24 result = collection.update_many(condition, {'$inc': {'age': 1}}) 25 print(result) 26 print(result.matched_count, result.modified_count) 27 # 這時候匹配條數就再也不爲1條了,運行結果以下: 28 # 29 # <pymongo.results.UpdateResult object at 0x10c6384c8> 30 # 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屬性獲取刪除的數據條數。
關於$的其餘功能符號:code
# 在這裏將一些功能符號再歸類以下: """ 符號含義示例示例含義 $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'}自身粉絲數等於關注數 """