MongoDB數(shù)據(jù)庫的使用

MongoDB的優(yōu)勢

? ? ? ? ? ? ? ? ? ? ? ? 1.易擴展,這也是非關系數(shù)據(jù)庫共有的優(yōu)勢

? ? ? ? ? ? ? ? ? ? ? ? 2.大數(shù)據(jù)量,高性能,非常高的讀寫性能

? ? ? ? ? ? ? ? ? ? ? ? 3.靈活的數(shù)據(jù)模型,無需事先為要存儲的數(shù)據(jù)建立字段

MongoDB的安裝

? ? ? ? ? ? ? ? ? ? ? ? ? 1.pip install mongodb

? ? ? ? ? ? ? ? ? ? ? ? ? ?2. 啟動:sudo service mongod start 或者 sudo mongod --config /usr/local/mongodb/mongodb.conf

? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.停止:sudo service mongod stop

? ? ? ? ? ? ? ? ? ? ? ? ? ? 4.重啟:sudo service mongod restart

? ? ? ? ? ? ? ? ? ? ? ? ? ? 5.查看是否啟動成功:ps ajx|grep mongod

? ? ? ? ? ? ? ? ? ? ? ? ? ? 6.配置文件的位置:/etc/mongod.conf

? ? ? ? ? ? ? ? ? ? ? ? ? ? 7.默認端口:27017

? ? ? ? ? ? ? ? ? ? ? ? ? ? 8.日志的位置:/var/log/mongodb/mongod.log? ?

數(shù)據(jù)庫的命令

1.查看當前的數(shù)據(jù)庫:db

2.查看所有的數(shù)據(jù)庫:show dbs

3.切換數(shù)據(jù)庫:use 數(shù)據(jù)庫名字

4.刪除當前的數(shù)據(jù)庫:db.dropDatabase()??

集合的命令

1.不手動創(chuàng)建集合:行不存在的集合中第一次加入數(shù)據(jù)時,集合會被創(chuàng)建出來

2.手動創(chuàng)建集合:db.createCollection(name,options)

例如:db.createCollection('sub',{capped:true,size:10})

參數(shù)capped:默認為false表示不設置上限

參數(shù)size:指定文檔上限,單位為字節(jié),托超過上限,會將前面的文檔覆蓋

3.查看集合:show collections

4.刪除集合:db.集合名字.drop()

數(shù)據(jù)類型

1.Object ID:文檔ID

2.String:字符串,最常用

3.Boolean:存儲一個布爾值,true或false

4.Integer:整數(shù)可以是32位或64位

5.Double:存儲浮點值

6.Object:用于嵌入式的文檔,即一個值為一個文檔

7.Null:存儲Null值

8.Timestamp:時間戳,表示從1970-1-1到現(xiàn)在的總秒數(shù)

9.Date:存儲當前日期或時間的UNIX時間格式

10.創(chuàng)建日期語句如下:參數(shù)的格式為YYYY-MM-DD

new Date('2020-01-01')

11.每個文檔都有一個屬性:_id 保證每個文檔的唯一性

可以自己去設置_id插入文檔,如果沒有提供,那么MongDB為每個文檔提供一個獨特的_id,類型為objectID

插入

1.db.集合名字.insert(document)

例如:db.stu.insert({_id:'20200101',name:'gj',gender:1})

保存

db.集合名字.save(document)

如果文檔的_id已經(jīng)存在則修改,不存在則添加

查詢

db.集合名字.find()

更新

db.集合名稱.update(<query>,<update>,{multi:<boolean>})

query:查詢條件

update:更新操作符

multi:可選,默認是false,表示只更新找到的第一條記錄,值位true表示把滿足條件的文檔全部更新

例如:db.stu.update({name:'hr'},{name:'mnc'})?更新一條,把全部內(nèi)容替換

db.stu.update({name:'hr'},{$set:{name:'mnc'}}) 更新一條,指定一個鍵對應的值

db.stu.update({},{$set:{gender:0}},{multi:true}) 更新全部

刪除

db.集合名字.remove(<query>,{justOne:<boolean>})

query:刪除文檔的條件

justOne:設置為ture或1,則只刪除一條,默認false,表示刪除多條

比較運算符

等于:默認是等于,沒有運算符

小于:$it

小于等于:$ite

大于:$gt

大于等于:$gte

不等于:$ne

例如:db.stu.find({age:{$lte:18}})


范圍運算符

$in,$nin判斷是否在某個范圍內(nèi)

例如:db.stu.find({age:{$in:[18,28,38]}})?


邏輯運算符

and:并且,和

db.stu.find({age:{$gte:18},gender:true})

or:使用$or,值為數(shù)組

db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})


高級查詢

1.db.集合名字.find({文檔條件})

2.db.集合名字.findone({文檔條件}) 只返回一條

3.db.集合名字.find({條件文檔}).pretty() 將結果格式化輸出

4.支持正則表達式:使用//或$regex編寫

例如:db.products.find({sku:/^abc/})

? ? ? ? ? ? db.products.find({sku:{$regex:'789$'}})

5.limit:用于讀取指定數(shù)量得文檔

例如:查詢2條學生信息

db.stu.find().limit(2)

6.skip:用于跳過指定數(shù)量得文檔

db.stu.find().skip(2)

可以同時使用db.stu.find().limit(3).skip(2)

7.自定義查詢

使用$where后面寫一個函數(shù),返回滿足條件得數(shù)據(jù)查詢年齡大于30得學生

db.stu.find({$where:function(){return this.age>30;}})

8.投影:在查詢到得返回結果中,只選擇必要得字段db.集合名字.find({},{字段名稱1,...})

參數(shù)為字段與值,值為1表示顯示,值為0不顯,特殊:對于_id列默認是顯示得,如果不顯示需要明確設置為0

例如:db.stu.find({},{_id:0,name:1,gender:1})

9.排序:方法sort(),用于對集進行排序

db.集合名稱.find().sort({字段:1,...})

參數(shù)1為升序,-1為降序

例如:根據(jù)性別降序,在根據(jù)年齡升序

db.stu.find().sort({gender:-1,age:1})

10.統(tǒng)計個數(shù):方法count()

db.集合名字.find({條件}).count()

db.集合名字.count({條件})

db.stu.find({gender:ture}).count()

db.stu.count({age:{$gt:20},gender:true})


數(shù)據(jù)備份和恢復

數(shù)據(jù)備份

mongodump -h dbhost -d dbname -o dbdirectory

-h:服務器地址,也可以指定端口號

-d:需要備份的數(shù)據(jù)庫名稱

-o:備份的數(shù)據(jù)存放位置,此目錄中存放著備份出來的數(shù)據(jù)

數(shù)據(jù)恢復

mongorestore -h dbhost -d dbname --dir dbdirectory

-h:服務器地址

-d:需要恢復的數(shù)據(jù)庫實例

--dir:備份數(shù)據(jù)所在位置


聚合命令

聚合是基于數(shù)據(jù)處理的聚合管道,每個文檔通過一個由多個階段組成的管道,可以對每個階段的管道進行分組,過濾等功能,然后經(jīng)過一系列的處理,輸出相應的結果

db.集合名稱.aggregate({管道:{表達式}})

常用管道命令

1.$group:將集合中的文檔分組,可用于統(tǒng)計結果

注意:1.$group對應的字典中有幾個鍵,結果中就有幾個鍵

2.分組依據(jù)需要放到'_id'后面

3.取不同的字段的值需要使用$,如'$age'

4.取字典嵌套的字典中的值的時候’$_id.country‘

5.能夠同時按照多個鍵進行分組’{$grop:{_id:{country:'$country',province:'$province'}}}‘

結果是’{_id:{country:'',province:''}}‘

按照gender進行分組,獲取不同數(shù)據(jù)的個數(shù)和平均年齡

db.stu.aggregate({$group:{_id:'$gender',count:{$sum:1},avg_age:{$avg:'$age'}}})

使用$group統(tǒng)計整個文檔

db.stu.aggregate({$group:{_id:null,count:{$sum:1},mean_age:{$avg:'age'}}})

2.$match:過濾數(shù)據(jù),只輸出符合條件的文檔


3.$project:修改輸入文檔的結構,如重命名,增加,刪除字段,創(chuàng)建計算結果



db.stu.aggregate({$group:{_id:null,count:{$sum:1},mean_age:{$avg:'age'}}},{$project:{gender:'%_id',count:1,'avg_age':1,_id:0}})

4.$sort:將輸入文檔排序后輸出

例如:查詢男生,女生人數(shù),并且按照降序排序

db.stu.aggregate{{$group:{_id:'$gender',counter:{$sum:1}}},{$sort:{counter:-1}}}

5.$limit:限制聚合管道返回的文檔數(shù)

6.$skip:跳過指定數(shù)量的文檔,并返回余下的文檔

7.$unwind:將數(shù)組類型的字段進行拆分

表達式

語法:表達式:'$列名'

1.$sum:計算總和,$sum:1 表示以一倍計數(shù)

2.$avg:計算平均值

3.$min:獲取最小值

4.$max:獲取最大值

5.$push:在結果文檔中插入值到一個數(shù)組中

6.$first:根據(jù)資源文檔的排序獲取第一個文檔數(shù)據(jù)

7.$last:根據(jù)資源文檔的排序獲取最后一個文檔數(shù)據(jù)

索引

語法:db.集合.ensureindex({屬性:1}),1表示升序,-1表示降序

例如:db.t1.ensureindex({name:1})

在默認情況下索引字段的值可以相同

創(chuàng)建唯一索引(索引的值是唯一的):

db.t1.ensureIndex({'name':1},{'unique':true})

建立聯(lián)合索引

db.t1.ensureIndex({name:1,age:1})

查看當前集合的所有索引:

db.t1.getIndexes()

刪除索引:

db.t1.dropIndex('索引名稱')

mongodb和python間交互

from pymongo import Mongoclient

client = MongoClient(host='127.0.0.1',port=27017)

collection = client['test']['t251']

插入一條數(shù)據(jù)

ret1 = collection.insert({'name':'xiaoming','age':18})

插入多條數(shù)據(jù)

data_list = [{'name':'test{}'.format(i)} for i in range(10)]

colletion.insert_many(data_list)

查詢一個記錄

t =collection.find_one({'name':'xiaowang'})

查詢多條記錄

collection.find({'name':'xiaowang'})

更新一條數(shù)據(jù)

collection.update_one({'name':'xiaowang'},{$set:{'name':'xiaohong'}})

更新全部數(shù)據(jù)

collection.update_many({'name':'xiaowang'},{'$set':{'name':'xiaohong'}})

刪除一條

collection.delete_one({'name':'xiaowang'})

刪除所有條件滿足的數(shù)據(jù)

collection.delete_many({'name':'xiaowang'})

? ??????????????

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 簡介 MongoDB 是一個基于分布式文件存儲的NoSQL數(shù)據(jù)庫 由C++語言編寫,運行穩(wěn)定,性能高 旨在為 WE...
    大熊_7d48閱讀 37,528評論 1 9
  • 簡介 NoSQL : 全名為Not Only SQL, 指的是非關系型的數(shù)據(jù)庫 隨著訪問量上升, 網(wǎng)站的數(shù)據(jù)庫性能...
    奮斗的老王閱讀 3,070評論 4 47
  • 1. MongoDB 簡介 MongoDB是一個可擴展的高性能,開源,模式自由,面向文檔的NoSQL,基于分布式文...
    rhlp閱讀 1,129評論 0 3
  • MongoDB數(shù)據(jù)的增刪改查 說到MongoDB的增刪改查,首先要知道MongoDB中的三要素 數(shù)據(jù)庫,相似于my...
    夢里才是真閱讀 1,298評論 0 4
  • 知識點:美化輸出:db.stu.find().pretty() $project:修改輸入文檔的結構。可以用來重命...
    胖虎很可愛閱讀 743評論 0 1