MongoDB 快速入門之 Python 交互篇 - 手把手教會你數(shù)據(jù)恢復(fù)與備份 | 【綻放吧!數(shù)據(jù)庫】

      網(wǎng)友投稿 738 2022-05-29

      易擴展

      大數(shù)據(jù)量,高性能

      靈活的數(shù)據(jù)模型

      安裝與啟動

      安裝mongodb:sudo apt-get install -y mongodb-org

      安裝可視化管理界面:https://robomongo.org/download

      查看幫助:mongod –help

      啟動服務(wù):sudo service mongod start

      停止服務(wù):sudo service mongod stop

      重啟服務(wù):sudo service mongod restart

      查看進程:ps ajx|grep mongod

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

      默認端口:27017

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

      查看當(dāng)前的數(shù)據(jù)庫:db

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

      切換數(shù)據(jù)庫:use db_name

      刪除當(dāng)前的數(shù)據(jù)庫:db.dropDatabase()

      當(dāng)集合不存在時,插入任何一條數(shù)據(jù)集合自動創(chuàng)建。

      或者手動創(chuàng)建集合:db.createCollection(name,[options])

      其中options:

      參數(shù)capped: 默認值為false表示不設(shè)置上限,值為true表示設(shè)置上限 參數(shù)size: 當(dāng)capped值為true時,需要指定此參數(shù),表示上限大小,當(dāng)文檔達到上限時,會將之前的數(shù)據(jù)覆蓋,單位為字節(jié)

      當(dāng)集合存在時:

      查看集合:show collections

      刪除集合:db.集合名稱.drop()

      Object ID:文檔ID

      String: 字符串,最常使用,必須是有效的UTF-8

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

      Integer: 整數(shù)可以是32位或64位,這取決于服務(wù)器

      Double: 存儲浮點值

      Arrays: 數(shù)組或列表, 多個值存儲到一個鍵

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

      Null: 存儲Null值

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

      Date: 存儲當(dāng)前日期或時間的UNIX時間格式

      注意點:

      創(chuàng)建日期語句如下 :參數(shù)的格式為YYYY-MM-DD new Date('2017-12-20') 每個文檔都有一個屬性,為_id,保證每個文檔的唯一性 可以自己去設(shè)置_id插入文檔,如果沒有提供,那么MongoDB為每個?檔提供了一個獨特的_id,類型為objectID objectID是一個12字節(jié)的十六進制數(shù): 前4個字節(jié)為當(dāng)前時間戳 接下來3個字節(jié)的機器ID 接下來的2個字節(jié)中MongoDB的服務(wù)進程id 最后3個字節(jié)是簡單的增量值

      插入數(shù)據(jù)(字段_id存在就報錯):db.集合名稱.insert(document)

      插入數(shù)據(jù)(字段_id存在就更新):db.集合名稱.save(document)

      舉個栗子:

      #插入文檔時,如果不指定_id參數(shù),MongoDB會為文檔分配一個唯一的ObjectId db.xianyu.insert({name:"xianyuplus",age:"3"}) #插入文檔時,可以指定_id參數(shù) db.xianyu.insert({_id:"10001",name:"xianyuplus",age:"30"}) #更新了上面_id為1001的文檔 db.xianyu.save({_id:"10001",name:"xianyuplus",age:"40"})

      查詢數(shù)據(jù):db.集合名稱.find()

      舉個栗子:

      db.xianyu.find()

      更新數(shù)據(jù):db.集合名稱.update( ,,{multi: })

      參數(shù)query:查詢條件 參數(shù)update:更新操作符 參數(shù)multi:可選,默認是false,表示只更新找到的第一條記錄,值為true表示把滿足條件的文檔全部更新

      舉個栗子:

      原有內(nèi)容: { "_id" : ObjectId("5b66f05f1194e110103bc283"), "name": "xianyuplus", "age": "40" } # 將name為xianyuplus的值替換為xianyuplus1 db.xianyu.update({name:"xianyuplus"},{name:"xianyuplus1"}) 操作后內(nèi)容: { "_id" : ObjectId("5b66f05f1194e110103bc283"), "name": "xianyuplus1" }

      可以看到單單使用update更新數(shù)據(jù)會導(dǎo)致原有數(shù)據(jù)被新數(shù)據(jù)替換,所以我們應(yīng)該搭配$set使用,指定更新對應(yīng)的鍵值。

      舉個栗子:

      原有內(nèi)容: { "_id" : ObjectId("5b66f05f1194e110103bc283"), "name": "xianyuplus", "age": "40" } # 將name為xianyuplus的值更新為xianyuplus1 db.xianyu.update({name:"xianyuplus"},{$set:{name:"xianyuplus1"}}) 操作后內(nèi)容: { "_id" : ObjectId("5b66f05f1194e110103bc283"), "name": "xianyuplus1", "age": "40" }

      更新多條數(shù)據(jù):使用參數(shù)multi:true

      舉個栗子:

      # 更新全部數(shù)據(jù)的name值為xianyuplus1 db.stu.update({},{$set:{name:"xianyuplus1"}},{multi:true})

      注意:multi update only works with $ operators 即multi只要和$搭配使用時才能起效。

      刪除數(shù)據(jù):db.集合名稱.remove(,{justOne: })

      參數(shù)query:可選,刪除的文檔的條件 參數(shù)justOne:可選,如果設(shè)為true或1,則只刪除一條,默認fals,表示刪除多條

      MongoDB 快速入門之 Python 交互篇 - 手把手教會你數(shù)據(jù)恢復(fù)與備份 | 【綻放吧!數(shù)據(jù)庫】

      舉個栗子:

      # 把name值為xianyuplus的數(shù)據(jù)全部刪掉 db.xianyu.remove({name:"xianyuplus"})

      查詢文檔:db.集合名稱.find({條件文檔})

      查詢一條數(shù)據(jù):db.集合名稱.findOne({條件文檔})

      格式化查詢:db.集合名稱.find({條件文檔}).pretty()

      舉個栗子:

      # 查詢name為xianyuplus的數(shù)據(jù) db.xianyu.find({name:"xianyuplus"}) # 查詢一條name為xianyuplus的數(shù)據(jù) db.xianyu.findOne({name:"xianyuplus"})

      等于:如上述栗子

      大于:$gt ( greater than )

      大于等于:$gte ( greater than equal )

      小于:$lt ( less than )

      小于等于:$lte ( less than equal )

      不等于:$nt ( not equal )

      舉個栗子:

      # 查詢age大于20的數(shù)據(jù) db.xianyu.find({age:{$gt:20}}) # 查詢age大于等于20的數(shù)據(jù) db.xianyu.find({age:{$gte:20}}) # 查詢age小于20的數(shù)據(jù) db.xianyu.find({age:{$lt:20}}) # 查詢age小于等于20的數(shù)據(jù) db.xianyu.find({age:{$lte:20}}) # 查詢age不等于20的數(shù)據(jù) db.xianyu.find({age:{$ne:20}})

      and:在find條件文檔中寫入多個字段條件即可

      or:使用$or

      舉個栗子:

      #查找name為xianyuplus且age為20的數(shù)據(jù) db.xianyu.find({name:"xianyuplus",age:20}) #查找name為xianyuplus或age為20的數(shù)據(jù) db.xianyu.find({$or:[{name:"xianyuplus"},{age:20}]}) #查找name為xianyuplus或age大于20的數(shù)據(jù) db.xianyu.find({$or:[{age:{$gt:20}},{name:"xianyuplus"}]}) #查找age大于等于20或gender為男并且name為xianyuplus的數(shù)據(jù) db.xianyu.find({$or:[{gender:"true"},{age:{$gte:18}}],name:"xianyuplus"})

      使用$in與$nin判斷是否在某一范圍內(nèi)

      舉個栗子:

      #查詢年齡為18、28的數(shù)據(jù) db.xianyu.find({age:{$in:[]18,28}})

      使用//或$regex編寫正則表達式

      舉個栗子:

      # 查詢name以xian開頭的數(shù)據(jù) db.xianyu.find({name:/^xianyu/}) db.xianyu.find({name:{$regex:'^xianyu'}})

      查詢前n條數(shù)據(jù):db.集合名稱.find().limit(NUMBER)

      跳過n條數(shù)據(jù):db.集合名稱.find().skip(NUMBER)

      舉個栗子:

      #查詢前3條數(shù)據(jù) db.xianyu.find().limit(3) #查詢3條后的數(shù)據(jù) db.xianyu.find().skip(3) #skip和limit可以搭配使用,查詢4,5,6條數(shù)據(jù) db.xianyu.find().skip(3).limit(3)

      使用$where自定義查詢,這里使用的是js語法

      舉個栗子:

      //查詢age大于30的數(shù)據(jù) db.xianyu.find({ $where:function() { return this.age>30;} })

      投影:在查詢結(jié)果中只顯示你想要看到的數(shù)據(jù)字段內(nèi)容。

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

      想顯示的字段設(shè)置為1,不想顯示的字段不設(shè)置,而_id這個字段比較特殊,想要他不顯示需要設(shè)置_id為0。

      #查詢結(jié)果中只顯示name字段,不顯示age db.xianyu.find({},{name:1})

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

      將需要排序的字段設(shè)置值:升序為1,降序為-1

      舉個栗子:

      #先按照性別降序排列再按照年齡升序排列 db.xianyu.find().sort({gender:-1,age:1})

      統(tǒng)計數(shù)目:db.集合名稱.find({條件}).count()

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

      舉個栗子:

      #查詢age為20的數(shù)據(jù)個數(shù) db.xianyu.find({age:20}).count() #查詢age大于20,且性別為nan的數(shù)據(jù)個數(shù) db.xianyu.count({age:{$gt:20},gender:true})

      去重:db.集合名稱.distinct('去重字段',{條件})

      舉個栗子:

      #去除家鄉(xiāng)相同,且年齡大于18的數(shù)據(jù) db.xianyu.distinct('hometown',{age:{$gt:18}})

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

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

      常用管道:

      $group: 將集合中的文檔分組, 可用于統(tǒng)計結(jié)果 $match: 過濾數(shù)據(jù), 只輸出符合條件的文檔 $project: 修改輸出文檔的結(jié)構(gòu), 如重命名、 增加、 刪除字段、 創(chuàng)建計算結(jié)果 $sort: 將輸出文檔排序后輸出 $limit: 限制聚合管道返回的文檔數(shù) $skip: 跳過指定數(shù)量的文檔, 并返回余下的文檔 $unwind: 將數(shù)組類型的字段進行拆分

      常用表達式:表達式:"列名"

      $sum: 計算總和, $sum:1 表示以一倍計數(shù) $avg: 計算平均值 $min: 獲取最小值 $max: 獲取最大值 $push: 在結(jié)果文檔中插入值到一個數(shù)組中 $first: 根據(jù)資源文檔的排序獲取第一個文檔數(shù)據(jù) $last: 根據(jù)資源文檔的排序獲取最后一個文檔數(shù)據(jù)

      $group:將文檔進行分組以便于統(tǒng)計數(shù)目

      用法:_id表示分組依據(jù),_id:"$字段名"

      舉個栗子:

      #按照hometown分組,并計數(shù) db.xianyu.aggregate({$group:{_id:"$hometown", count:{$sum:1}}}) #將集合中所有的內(nèi)容分為一組,統(tǒng)計個數(shù) db.xianyu.aggregate({$group:{_id:null, count:{$sum:1}}})

      $project:修改輸入文檔的結(jié)構(gòu),如:重命名,增加、刪除字段等

      舉個栗子:

      #按照hometown分組,并計數(shù) #分組輸出,只顯示count字段 db.xianyu.aggregate( {$group:{_id:"$hometown", count:{$sum:1}}}, {$project:{_id:0,count:1}} )

      $match:用于過濾數(shù)據(jù),只輸出符合條件的文檔,功能和find類似,但是match是管道命令,能將結(jié)果交給后一個管道,但是find不可以。

      舉個栗子:

      #查詢age大于20 #按照hometown分組,并計數(shù) #分組輸出,只顯示count字段 db.xianyu.aggregate( {$match:{age:{$gte:20}}}, {$group:{_id:"$hometown", count:{$sum:1}}}, {$project:{_id:0,count:1}} )

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

      舉個栗子:

      #查詢age大于20 #按照hometown分組,并計數(shù) #分組輸出,只顯示count字段 #按照計數(shù)升序排序 db.xianyu.aggregate( {$match:{age:{$gte:20}}}, {$group:{_id:"$hometown", count:{$sum:1}}}, {$project:{_id:0,count:1}}, {$sort:{count:1}} )

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

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

      舉個栗子:

      #查詢age大于20 #按照hometown分組,并計數(shù) #按照計數(shù)升序排序 #跳過前一個文檔,返回第二個 db.xianyu.aggregate( {$match:{age:{$gte:20}}}, {$group:{_id:"$hometown", count:{$sum:1}}}, {$sort:{count:1}}, {$skip:1}, {$limit:1} )

      $unwind:將文檔中的某一個數(shù)組類型字段拆分成多條, 每條包含數(shù)組中的一個值

      db.集合名稱.aggregate({$unwind:'$字段名稱'})

      舉個栗子:

      db.xianyu.insert({_id:1,item:'t-shirt',size:['S','M','L']}) db.xianyu.aggregate({$unwind:'$size'}) 輸出: { "_id" : 1, "item" : "t-shirt", "size" : "S" } { "_id" : 1, "item" : "t-shirt", "size" : "M" } { "_id" : 1, "item" : "t-shirt", "size" : "L" }

      $group對應(yīng)的字典中有幾個鍵,結(jié)果中就有幾個鍵

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

      取不同的字段的值需要使用

      ,

      ,`

      ,‘gender,$age`

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

      能夠同時按照多個鍵進行分組

      {$group:{_id:{country:"$字段",province:"$字段"}}}

      結(jié)果是:{_id:{country:"",province:""}

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

      創(chuàng)建唯一索引:db.集合.ensureIndex({"屬性":1},{"unique":true})

      創(chuàng)建唯一索引并消除:

      db.集合.ensureIndex({"屬性":1},{"unique":true,"dropDups":true})

      建立聯(lián)合索引:db.集合.ensureIndex({屬性:1,age:1})

      查看當(dāng)前集合的所有索引:db.集合.getIndexes()

      刪除索引:db.集合.dropIndex('索引名稱')

      備份:mongodump -h dbhost -d dbname -o dbdirectory

      -h: 服務(wù)器地址,也可以指定端口號 -d: 需要備份的數(shù)據(jù)庫名稱 -o: 備份的數(shù)據(jù)存放位置,此目錄中存放著備份出來的數(shù)據(jù)

      恢復(fù):mongorestore -h dbhost -d dbname --dir dbdirectory

      -h: 服務(wù)器地址 -d: 需要恢復(fù)的數(shù)據(jù)庫實例 --dir: 備份數(shù)據(jù)所在位置

      安裝:pip install pymongo

      導(dǎo)入模塊:from pymongo import MongoClient

      實例化對象以鏈接數(shù)據(jù)庫,連接對象有host,port兩個參數(shù)。

      from pymongo import MongoClient class clientMongo: def __init__(self): client = MongoClient(host="127.0.0.1", port=27017) #使用[]括號的形式選擇數(shù)據(jù)庫和集合 self.cliention = client["xianyu"]["xianyuplus"]

      插入單條數(shù)據(jù):返回ObjectId

      def item_inser_one(self): ret = self.cliention.insert({"xianyu":"xianyuplus","age":20}) print(ret)

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

      def item_insert_many(self): item_list = [{"name":"xianyuplus{}".format(i)} for i in range(10000)] items = self.cliention.insert_many(item_list)

      查詢單條數(shù)據(jù):

      def item_find_one(self): ret = self.cliention.find_one({"xianyu":"xianyuplus"}) print(ret)

      查詢多條數(shù)據(jù):

      def item_find_many(self): ret = self.cliention.find({"xianyu":"xianyuplus"}) for i in ret: print(i)

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

      def item_update_one(self): self.cliention.update_one({"xianyu":"xianyuplus"},{"$set":{"xianyu":"xianyu"}})

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

      def item_update(self): self.cliention.update_many({"xianyu":"xianyuplus"},{"$set":{"xianyu":"xianyu"}})

      刪除一條數(shù)據(jù):

      def item_delete_one(self): self.cliention.delete_one({"xianyu":"xianyuplus"})

      刪除符合條件的數(shù)據(jù):

      def item_delete_many(self): self.cliention.delete_many({"xianyu":"xianyuplus"})

      【綻放吧!數(shù)據(jù)庫】有獎?wù)魑幕馃徇M行中:https://bbs.huaweicloud.com/blogs/285617

      MongoDB Python 開發(fā)者 數(shù)據(jù)庫

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:上海中學(xué)科技節(jié)作品評選文檔
      下一篇:12個開源后臺管理系統(tǒng)
      相關(guān)文章
      亚洲精品无码久久久影院相关影片 | 亚洲夂夂婷婷色拍WW47| 亚洲精品国产成人专区| 国产亚洲精品资在线| 亚洲午夜无码片在线观看影院猛| 国产亚洲福利一区二区免费看| 亚洲小说图区综合在线| 亚洲综合激情五月丁香六月| 亚洲精品国产国语| 亚洲日本VA午夜在线电影| 国产亚洲精品成人AA片| 亚洲日韩一区二区三区| 亚洲人成无码网站在线观看| 亚洲日韩看片无码电影| 亚洲av最新在线观看网址| 亚洲av无码有乱码在线观看| 苍井空亚洲精品AA片在线播放| 色五月五月丁香亚洲综合网| 亚洲精品人成无码中文毛片| 丁香五月亚洲综合深深爱| 国产亚洲免费的视频看| 亚洲五月激情综合图片区| 久久亚洲精品国产精品| 亚洲无砖砖区免费| 亚洲精品456人成在线| 亚洲精品乱码久久久久蜜桃| 精品国产亚洲一区二区三区在线观看| 国产午夜亚洲精品不卡| 亚洲日本在线观看视频| 亚洲人成影院在线无码按摩店| 亚洲av无码专区在线播放| 久久av无码专区亚洲av桃花岛| 亚洲国产成人久久三区| 欧洲 亚洲 国产图片综合| 国产精品亚洲色图| 国产亚洲精品拍拍拍拍拍| 久久精品亚洲视频| 亚洲免费在线视频观看| 亚洲第一第二第三第四第五第六| 亚洲国产成人久久一区久久| 亚洲自偷自偷偷色无码中文|