mongodb基本使用

1、mongodb簡介

MongoDB是一個基於分佈式文件存儲的數據庫,是介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。python

2、安裝與配置

https://blog.csdn.net/congcong68/article/details/44277469正則表達式

 

3、mongodb的增刪改查

(一)數據庫操做

1 use blog  #切換數據庫,沒有時會建立
3 show dbs    #查看全部的數據庫(數據庫必須有數據纔會顯示)
5 db.dropDatabase()   #刪除數據庫

(二)collection操做

集合就是至關於關係數據庫中的表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({}) 

 

4、在python中的使用---pymongo模塊 

基本使用:.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'}自身粉絲數等於關注數
"""
相關文章
相關標籤/搜索