目錄
- 關系與非關系
- MongoDB簡介
- 常用命令
一、關系型數據庫
- 書與讀者 多對多
- 書與作者 一對多
- 書對出版日期 一對一
image.png
image.png
- MySql, Orcale, SqlServer, Access...
- SQL (結構化查詢語言)
- 存在哪些問題
- 存儲在硬盤上讀寫慢
- 保持ACID(事務原則)難擴展
二 、非關系型數據庫
非關系型數據庫優點
- NoSql(Not Only SQL)
key : value
- CAP -> BASE(三者不能同時使用,但是可以兩兩組合或者只用一個)
- 一致 性(Consistency) (所有節點在同一時間具有相同的數據)
- 可用性(Availability) (保證每個請求不管成功或者失敗都有響應)
- 分隔容忍(Partition tolerance) (系統中任意信息的丟失或失敗不會影響系統的繼續運作)
非關系型數據庫缺點
- 沒有標準化
- 有限的查詢功能 (到目前為止)
二者的關系
image.png
image.png
三、MongoDB
- 非關系型數據庫nosql
- 文檔存儲:類json格式
- 有機會對字段建立索引,實現關系數據庫
下載與安裝
- https://www.mongodb.com/download-center/community
-
安裝完成后需要配置環境變量
image.png
四、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格式顯示
- 插入和查看文檔
- 插入文檔時,MongoDB自動創建集合
db.collectionDemo.insert({"name" : "hello"})
- 查看插入的內容
-
db.collectionDemo.find().pretty()
image.png
-
- 插入復雜文檔
- 聲明變量,插入文檔
document=({
title: 'MongoDB',
by: 'Insane',
tags: ['mongodb', 'database', 'NoSQL'],
});
db.collectionDemo.insert(document)
-
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
-
#######修改操作符
$inc
- 用法:
{$inc:{field:value}}
- 作用:對一個數字字段的某個
field
增加value
- 示例:將 name 為 xiaohong 的學生的 age 增加 5
db.students.update({name:' xiaohong' },{$inc:{age:5}})
-
$set
:更新的概念,與{multi:true}
結合可以實現多處更新
- 用法:
{$set:{field:value}}
- 作用:把文檔中某個字段
field
的值設為value
- 示例:把xiaohong的 年齡設為10歲
db.students.update({name:' xiaohong' '}, {$set:{age:10}})
$unset
- 用法:
{$unset:{field:1}}
- 作用:刪除某個字段
field
- 示例:將 chenzhou 的年齡字段刪除
db.students.update({name:' 'chenzhou' },{$unset:{age:1}})
$push
- 用法:
{$push:{field:value}}
- 作用:把value追 加到field里。
注: field只 能是數組類型,如果field不存在,會自動插入一個數 組類型
- 示例:給chenzhou添加別名"michael"
db.students.update({name:' 'chenzhou" },{$push:{"ailas"."Michael"})
$rename
- 用法:
{$rename:{old_field_name:new_field_name}}
- 作用:對字段進行重命名
- 示例:把xiaohong記錄的name字段重命名為name2
db.students.update({name:"xiaohong"},{$rename:{"name":" name2"})