日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

一、mongodb数据库系列——介绍和安装 简单使用 增删改查

發(fā)布時間:2024/7/5 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一、mongodb数据库系列——介绍和安装 简单使用 增删改查 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、Mongodb的介紹和安裝

學習目標
  • 了解 非關系型數(shù)據(jù)庫的優(yōu)勢
  • 了解 mongodb的安裝

  • 1. mongodb的介紹

    1.1 什么是mongodb

    • mongodb 是一個功能最豐富的NoSQL非關系數(shù)據(jù)庫。由 C++ 語言編寫。
    • mongodb 本身提供S端存儲數(shù)據(jù),即server;也提供C端操作處理(如查詢等)數(shù)據(jù),即client。

    1.2 SQL和NoSQL的主要區(qū)別

    • 在SQL中層級關系: 數(shù)據(jù)庫>表>數(shù)據(jù)
    • 而在NoSQL中則是: 數(shù)據(jù)庫>集合>文檔
    1.2.1 數(shù)據(jù)之間無關聯(lián)性
    • SQL中如何需要增加外部關聯(lián)數(shù)據(jù)的話,規(guī)范化做法是在原表中增加一個外鍵,關聯(lián)外部數(shù)據(jù)表。
    • NoSQL則可以把外部數(shù)據(jù)直接放到原數(shù)據(jù)集中,以提高查詢效率。缺點也比較明顯,對關聯(lián)數(shù)據(jù)做更新時會比較麻煩。
    • SQL中在一個表中的每條數(shù)據(jù)的字段是固定的。而NoSQL中的一個集合(表)中的每條文檔(數(shù)據(jù))的key(字段)可以是互不相同的。
    1.2.2 拓展閱讀

    https://www.cnblogs.com/jeakeven/p/5402095.html

    1.3 mongodb作為非關系型數(shù)據(jù)庫相較于關系型數(shù)據(jù)庫的優(yōu)勢

    易擴展: NoSQL數(shù)據(jù)庫種類繁多, 但是一個共同的特點都是去掉關系數(shù)據(jù)庫的關系型特性。 數(shù)據(jù)之間無關系, 這樣就非常容易擴展

    大數(shù)據(jù)量,高性能: NoSQL數(shù)據(jù)庫都具有非常高的讀寫性能, 尤其在大數(shù)據(jù)量下表現(xiàn)優(yōu)秀。 這得益于它的非關系性,數(shù)據(jù)庫的結構簡單

    靈活的數(shù)據(jù)模型: NoSQL無需事先為要存儲的數(shù)據(jù)建立字段, 隨時可以存儲自定義的數(shù)據(jù)格式。 而在關系數(shù)據(jù)庫中, 增刪字段是一件非常麻煩的事情。 如果是非常大數(shù)據(jù)量的表, 增加字段簡直就是一個噩夢

    2. mongodb的安裝

    以ubuntu18.04為例

    mongodb具有兩種安裝方式:命令安裝 或 源碼安裝

    2.1 命令安裝

    在ubuntu中使用apt-get工具安裝

    sudo apt-get install -y mongodb-org

    或參考官方文檔 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

    2.2 源碼安裝

    2.2.1 選擇相應版本和操作系統(tǒng)并下載

    https://www.mongodb.com/download-center/community?jmp=docs

    2.2.2 解壓

    tar -zxvf mongodb-linux-x86_64-ubuntu1804-4.0.3.tgz

    2.2.3 移動到/usr/local/目錄下

    sudo mv -r mongodb-linux-x86_64-ubuntu1804-4.0.3/ /usr/local/mongodb

    2.2.4 在shell的初始化腳本.bashrc中添加mongodb可執(zhí)行文件到環(huán)境變量PATH中

    a. 進入.bashrc文件中

    cd ~ sudo vi .bashrc

    b. 在.bashrc文件的最后添加:

    export PATH=/usr/local/mongodb/bin:$PATH

    3. mongodb的官方文檔

    https://docs.mongodb.com/manual/introduction/


    小結

  • 了解 非關系型數(shù)據(jù)庫的優(yōu)勢
    • 易擴展
    • 高性能
    • 靈活的數(shù)據(jù)字段
  • 了解 mongodb的安裝
    • sudo apt-get install -y mongodb-org

  • 二、mongodb的簡單使用

    學習目標
  • 掌握 服務端的啟動
  • 掌握 客戶端的使用
  • 掌握 mongodb的數(shù)據(jù)庫和集合命令
  • 了解 文檔中的_id字段

  • 1. mongodb服務端的啟動

    • 默認端口:27017
    • 默認配置文件的位置:/etc/mongod.conf
    • 默認日志的位置:/var/log/mongodb/mongod.log

    mongodb服務端啟動分別兩種方式:

    • 本地測試方式的啟動(只具有本地數(shù)據(jù)增刪改查的功能)
    • 生產(chǎn)環(huán)境啟動(具有完整的全部功能)

    1.1 測試方式啟動

    • 啟動: sudo service mongod start (sudo service mongod start)
    • 停止: sudo service mongod stop
    • 重啟: sudo service mongod restart

    1.2 生產(chǎn)環(huán)境正式的啟動方式

    啟動: sudo mongod [–auth --dbpath=dbpath --logpath=logpath --append --fork] [-–f logfile ]

    • 只以 sudo mongod 命令啟動時,默認將數(shù)據(jù)存放在了 /data/db 目錄下,需要手動創(chuàng)建
    • –dbpath: 指定數(shù)據(jù)庫的存放路徑
    • –logpath: 指定日志的存放路徑
    • –append: 或–logappend 設置日志的寫入形式為追加模式
    • –fork: 或-fork 開啟新的進程運行mongodb服務
    • –f: 或-f 配置文件路徑(可以將上述配置信息寫入文件然后通過該文件中的參數(shù)進行加載啟動)
    • –auth: 以權限認證的方式啟動,我們會在后邊的課程中學習該內(nèi)容

    1.3 查看是否啟動成功

    ps aux | grep mongod

    2. 啟動mongodb的客戶端:進入mongo shell

    • 啟動本地客戶端: mongo
    • 查看幫助:mongo –help
    • 退出:exit或者ctrl+c

    3. mongodb的簡單使用

    開啟mongodb server的情況下,在進入mongo shell后,就可以做簡單的使用了

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

    • 查看當前的數(shù)據(jù)庫:db(沒有切換數(shù)據(jù)庫的情況下默認使用test數(shù)據(jù)庫)
    • 查看所有的數(shù)據(jù)庫:show dbs /show databases
    • 切換數(shù)據(jù)庫:use db_name
      • db_name為show dbs后返回的數(shù)據(jù)庫名
    • 刪除當前的數(shù)據(jù)庫:db.dropDatabase()

    3.2 mongodb集合的命令

    • 無需手動創(chuàng)建集合:
      向不存在的集合中第一次添加數(shù)據(jù)時,集合會自動被創(chuàng)建出來
    • 手動創(chuàng)建集合:
      • db.createCollection(name,options)
      • db.createCollection(“stu”)
      • db.createCollection(“sub”, { capped : true, size : 10 } )
      • 參數(shù)capped:默認值為false表示不設置上限,值為true表示設置上限
      • 參數(shù)size:集合所占用的字節(jié)數(shù)。 當capped值為true時,需要指定此參數(shù),表示上限大小,當文檔達到上限時, 會將之前的數(shù)據(jù)覆蓋,單位為字節(jié)
    • 查看集合:show collections
    • 刪除集合:db.集合名稱.drop()
    • 檢查集合是否設定上限: db.集合名.isCapped()

    3.3 簡單練習

    在mongo shell中輸入下列命令,查看結果

    show dbs use test show collections db db.stu.insert({'name':'郭靖', 'age':22}) show dbs show collections db.stu.find() db.stu.drop() show collections db.dropDatabase() show dbs exit

    3.3 mongodb中常見的數(shù)據(jù)類型(了解)

    3.3.1 常見類型
    • Object ID: 文檔ID/數(shù)據(jù)的ID,數(shù)據(jù)的主鍵
    • String: 字符串,最常用,必須是有效的UTF-8
    • Boolean: 存儲一個布爾值,true或false
    • Integer: 整數(shù)可以是32位或64位,這取決于服務器
    • Double: 浮點數(shù)
    • Arrays: 數(shù)組/列表
    • Object: mongodb中的一條數(shù)據(jù)/文檔,即文檔嵌套文檔
    • Null: 存儲null值
    • Timestamp: 時間戳,表示從1970-1-1到現(xiàn)在的總秒數(shù)
    • Date: 存儲當前日期或時間的UNIX時間格式
    3.3.2 注意點
    • 每個文檔都有一個屬性,為_id,保證每個文檔的唯一性,mongodb默認使用_id作為主鍵

      • 可以手動設置_id的值,如果沒有提供,那么MongoDB為每個文檔提供了一個獨特的_id, 類型為objectID
    • objectID是一個12字節(jié)的十六進制數(shù),每個字節(jié)兩位,一共是24位的字符串:

      • 前4個字節(jié)為當前時間戳
      • 接下來3個字節(jié)的機器ID
      • 接下來的2個字節(jié)中MongoDB的服務進程id
      • 最后3個字節(jié)是簡單的增量值

    小結

  • 服務端的啟動
    • sudo mongod --dbpath=數(shù)據(jù)庫路徑
  • 進入mongo shell客戶端
    • mongo
  • mongodb的數(shù)據(jù)庫和集合命令
    • show dbs
    • use db_name
    • show collections
    • db
    • db.集合名.drop()
    • db.dropDatabase()
    • exit
  • 了解文檔中的_id字段

  • 三、Mongodb的的增刪改查

    學習目標
  • 掌握 mongodb插入數(shù)據(jù)的方法
  • 掌握 mongodb保存數(shù)據(jù)的方法
  • 掌握 mongodb查詢數(shù)據(jù)的方法
  • 掌握 mongodb查詢結果的處理方法
  • 掌握 mongodb更新數(shù)據(jù)的方法
  • 掌握 mongodb刪除數(shù)據(jù)的方法

  • 1. mongodb插入數(shù)據(jù)

    命令:db.集合名稱.insert(document)

    db.stu.insert({name:'gj', gender:1}) db.stu.insert({_id:"20170101", name:'gj', gender:1})

    插文檔時,如果不指定_id參數(shù),MongoDB會為文檔自動分配一個唯一的ObjectId

    2. mongodb的保存

    命令:db.集合名稱.save(document)

    db.stu.save({_id:'20170101', name:'gj', gender:2}) db.stu.save({name:'gj', gender:2}) db.stu.find() use python21db.nor_col.insert([{"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true }, {"name" : "黃蓉", "hometown" : "桃花島", "age" : 18, "gender" : false }, {"name" : "華箏", "hometown" : "蒙古", "age" : 18, "gender" : false }, {"name" : "黃藥師", "hometown" : "桃花島", "age" : 40, "gender" : true }, {"name" : "段譽", "hometown" : "大理", "age" : 16, "gender" : true }, {"name" : "段王爺", "hometown" : "大理", "age" : 45, "gender" : true }, {"name" : "洪七公", "hometown" : "華箏", "age" : 18, "gender" : true }])db.nor_col.find()db.nor_col.save({_id:'5f08167af3eeea620efced4f',name:'zzz',gender:2}) db.nor_col.find()db.nor_col.save({_id:'5f081671111111111111',name:'pppp',gender:2}) db.nor_col.find()

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

    3 mongodb的查詢

    命令:db.集合名稱.find()

    可以使用以下數(shù)據(jù)進行練習

    db.stu.insert([{"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true }, {"name" : "黃蓉", "hometown" : "桃花島", "age" : 18, "gender" : false }, {"name" : "華箏", "hometown" : "蒙古", "age" : 18, "gender" : false }, {"name" : "黃藥師", "hometown" : "桃花島", "age" : 40, "gender" : true }, {"name" : "段譽", "hometown" : "大理", "age" : 16, "gender" : true }, {"name" : "段王爺", "hometown" : "大理", "age" : 45, "gender" : true }, {"name" : "洪七公", "hometown" : "華箏", "age" : 18, "gender" : true }])

    3.1 簡單查詢

    • 方法find(): 查詢

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

    • 方法findOne():查詢,只返回第一個

      db.集合名稱.findOne({條件文檔})

    • 方法pretty(): 將結果格式化;不能和findOne()一起使用!

      db.集合名稱.find({條件文檔}).pretty()

    3.2 比較運算符

    • 等于: 默認是等于判斷, 沒有運算符
    • 小于:$lt (less than)
    • 小于等于:$lte (less than equal)
    • 大于:$gt (greater than)
    • 大于等于:$gte
    • 不等于:$ne
    查詢年齡大于18的所有學生 db.stu.find({age:{$gte:18}})



    3.3 邏輯運算符

    邏輯運算符主要指與、或邏輯

    • and:在json中寫多個條件即可
    查詢年齡大于或等于18, 并且性別為true的學生 db.stu.find({age:{$gte:18},gender:true})


    • or:使用$or, 值為數(shù)組, 數(shù)組中每個元素為json
    查詢年齡大于18, 或性別為false的學生 db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})查詢年齡大于18或性別為男生, 并且姓名是郭靖 db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})

    3.4 范圍運算符

    使用$in, $nin 判斷數(shù)據(jù)是否在某個數(shù)組內(nèi)

    查詢年齡為18、 28的學生 db.stu.find({age:{$in:[18,28,38]}})

    3.5 支持正則表達式

    使用$regex編寫正則表達式

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

    3.6 自定義查詢

    mongo shell 是一個js的執(zhí)行環(huán)境
    使用$where 寫一個函數(shù), 返回滿足條件的數(shù)據(jù)

    查詢年齡大于30的學生 db.stu.find({$where:function() {return this.age>30;} })

    3.7 skip和limit

    • 方法limit(): 用于讀取指定數(shù)量的文檔
    db.集合名稱.find().limit(NUMBER) 查詢2條學生信息 db.stu.find().limit(2)

    • 方法skip(): 用于跳過指定數(shù)量的?檔
    db.集合名稱.find().skip(NUMBER) db.stu.find().skip(2)

    • 同時使用
    db.stu.find().limit(4).skip(5) db.stu.find().skip(5).limit(4)

    注意:先使用skip在使用limit的效率要高于前者

    3.8 投影

    在查詢到的返回結果中, 只選擇必要的字段

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

    參數(shù)為字段與值, 值為1表示顯示, 值為0不顯
    特別注意:

    • 對于_id列默認是顯示的, 如果不顯示需要明確設置為0
    • 對于其他不顯示的字段不能設置為0

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


    3.9 排序

    方法sort(), 用于對查詢結果按照指定的字段進行排序

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

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

    根據(jù)性別降序, 再根據(jù)年齡升序 db.stu.find().sort({gender:-1,age:1})



    3.10 統(tǒng)計個數(shù)

    方法count()用于統(tǒng)計結果集中文檔條數(shù)

    命令:db.集合名稱.find({條件}).count()
    命令:db.集合名稱.count({條件})

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



    去重:

    對年齡為18歲的查詢記錄進行去重:

    4 mongodb的更新

    db.集合名稱.update({query}, {update}, {multi: boolean})
    • 參數(shù)query:查詢條件
    • 參數(shù)update:更新操作符
    • 參數(shù)multi:可選,默認是false,表示只更新找到的第一條數(shù)據(jù),值為true表示把滿足條件的數(shù)據(jù)全部更新
    db.stu.update({name:'hr'},{name:'mnc'}) # 全文檔進行覆蓋更新 db.stu.update({name:'hr'},{$set:{name:'hys'}}) # 指定鍵值更新操作 db.stu.update({},{$set:{gender:0}},{multi:true}) # 更新全部

    注意:“multi update only works with $ operators”

    • multi參數(shù)必須和$set一起使用!


      批量更新,更新查詢到的記錄:

      批量更新,添加一個新的字段school:


      查詢到name為zzz的記錄,相同則不做任何操作,不相同則進行更新操作:

    沒有查詢到name為hhh的記錄,所以 插入一條新的記錄:

    5 mongodb的刪除

    db.集合名稱.remove({query}, {justOne: boolean}) - 參數(shù)query:可選,刪除的?檔的條件 - 參數(shù)justOne:可選, 如果設為true或1,則只刪除一條,默認false,表示刪除全部




    小結

  • mongo shell中的增
    db.集合名.insert({數(shù)據(jù)})
    db.集合名.save({包含_id的完整數(shù)據(jù)}) # 根據(jù)指定的_id進行保存,存在則更新,不存在則插入
  • mongo shell中的刪
    db.集合名.remove({條件}, {justOne: true/false})
  • mongo shell中的改
    db.集合名.update({條件}, {$set:{完整數(shù)據(jù)/部分字段}}, {multi: true/false})
  • mongo shell中的查
    db.集合名.find({條件}, {字段投影})

  • 總結

    以上是生活随笔為你收集整理的一、mongodb数据库系列——介绍和安装 简单使用 增删改查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。