MongoDB數據庫

目錄

  • 關系與非關系
  • MongoDB簡介
  • 常用命令

一、關系型數據庫

  • 書與讀者 多對多
  • 書與作者 一對多
  • 書對出版日期 一對一
image.png

image.png
  • MySql, Orcale, SqlServer, Access...
  • SQL (結構化查詢語言)
  • 存在哪些問題
    1. 存儲在硬盤上讀寫慢
    2. 保持ACID(事務原則)難擴展

二 、非關系型數據庫

非關系型數據庫優點
  • NoSql(Not Only SQL)
  • key : value
  • CAP -> BASE(三者不能同時使用,但是可以兩兩組合或者只用一個)
    • 一致 性(Consistency) (所有節點在同一時間具有相同的數據)
    • 可用性(Availability) (保證每個請求不管成功或者失敗都有響應)
    • 分隔容忍(Partition tolerance) (系統中任意信息的丟失或失敗不會影響系統的繼續運作)
非關系型數據庫缺點
  • 沒有標準化
  • 有限的查詢功能 (到目前為止)
二者的關系
image.png

image.png

三、MongoDB

  • 非關系型數據庫nosql
  • 文檔存儲:類json格式
  • 有機會對字段建立索引,實現關系數據庫
下載與安裝

四、MongoDB操作

配置數據庫目錄
  • 運行MongoDB服務器
    • mongod -dbpath xxx
  • 連接MongoDB
    • mongo
      image.png
數據庫增刪改查
  • 查看當前數據庫
    • show dbs
  • 切換數據庫(如果沒有會自動創建)
    • use demo1
  • 往數據庫中插入一-條數據
    • db.demo1.insert({"name": “小紅”})
      -切換數據庫
    • use demo1
  • 刪除數據庫(刪除之前需要先切換到對應的數據庫)
    • db.dropDatabase()
      image.png

五、集合

什么是集合
  • 集合相當于一張表
  • 集合可以有多個文檔
創建/查看/刪除集合
  • 創建集合
    • db.createCollection('collection1')
  • 查看已經創建的集合
    • show collections
  • 刪除集合
    • db.collection1.drop()
      image.png
插入和查看文檔(即集合中的數據)
  • 文檔是mongodb中的基本單元
  • 相當于表中的一條記錄
  • 以json格式顯示
  1. 插入和查看文檔
  • 插入文檔時,MongoDB自動創建集合
    • db.collectionDemo.insert({"name" : "hello"})
  • 查看插入的內容
    • db.collectionDemo.find().pretty()
      image.png
  1. 插入復雜文檔
  • 聲明變量,插入文檔
document=({
  title: 'MongoDB',
    by: 'Insane',
    tags: ['mongodb', 'database', 'NoSQL'],
});
db.collectionDemo.insert(document)
  1. find() 操作


    image.png
修改和刪除文檔
  • 修改格式
db.collection.update(
  <query>,
  <update>,
  {
    upsert: <boolean>,
    multi: <boolean>,
    writeConcern: <document>
  }
)
  • upsert:如果不存在update的記錄,是否插入,默認false
  • multi:把按條件查出來多條記錄全部更新,默認fasle
  • writeConcern:拋出異常的級別。

update是替換,沒有修改的字段會消失!

  • 修改文檔

    db.col.update({title':'MongoDB'}, 
      {title':"MongoDB123'})
    
  • 修改多個文檔

    db.col.update({'name':hello'},
      {$set:{'name':"hello123'}},
      {multi:true})
    
    • 如果不加$set就會全部替換
      image.png
  • 刪除多個文檔

    • db.col.remove({ name :'hello123'})
  • 刪除一個文檔

    • db.col.remove({'name':'hello'},1)
      image.png

#######修改操作符

  1. $inc
  • 用法:{$inc:{field:value}}
  • 作用:對一個數字字段的某個field增加value
  • 示例:將 name 為 xiaohong 的學生的 age 增加 5
    • db.students.update({name:' xiaohong' },{$inc:{age:5}})
  1. $set:更新的概念,與 {multi:true}結合可以實現多處更新
  • 用法:{$set:{field:value}}
  • 作用:把文檔中某個字段field的值設為value
  • 示例:把xiaohong的 年齡設為10歲
    • db.students.update({name:' xiaohong' '}, {$set:{age:10}})
  1. $unset
  • 用法:{$unset:{field:1}}
  • 作用:刪除某個字段field
  • 示例:將 chenzhou 的年齡字段刪除
    • db.students.update({name:' 'chenzhou' },{$unset:{age:1}})
  1. $push
  • 用法:{$push:{field:value}}
  • 作用:把value追 加到field里。

注: field只 能是數組類型,如果field不存在,會自動插入一個數 組類型

  • 示例:給chenzhou添加別名"michael"
    • db.students.update({name:' 'chenzhou" },{$push:{"ailas"."Michael"})
  1. $rename
  • 用法:{$rename:{old_field_name:new_field_name}}
  • 作用:對字段進行重命名
  • 示例:把xiaohong記錄的name字段重命名為name2
    • db.students.update({name:"xiaohong"},{$rename:{"name":" name2"})
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容