2.5.1 MongoDB -- 介紹
- mysql vs mongo
- 快速開始
mysql vs mongo
對比 | mysql | mongo |
---|---|---|
資料儲存 | table 二維表結構,需要預先定義結構 | json 類文件,不需要預先定義結構。可隨意新增或刪除欄位,新增欄位不會對已存在的欄位產生影響 |
查詢語法 | sql (structured query language) | mongo |
索引 | 如果不定義索引,則進行全表掃描 | 如果不定義索引,則進行全表掃描 |
叢集 | 支援主從複製 | 內建副本集、分片、和自動選舉 |
場景 | 關係型結構,在多行插入時需要事務保障 | 實時資料分析、內容管理、iot裝置、移動裝置(事務需要有內建副本才可以做) |
資料結構 | 結構化、資料 schema 定義清晰 | 未知資料結構型別 |
風險 | sql 注入攻擊 | 相對來說風險更低 |
分析 | 確實需要關係型資料庫來保障 | 寫入併發高,沒有 DBA |
快速開始
安裝 mongo in docker
docker run -it --volume=/root/docker/mongo01/data:/data/db -p 27017:27017 --name mongo01 -d mongo
robt 3t 下載地址:
https://download.studio3t.com/robomongo/windows/robo3t-1.4.2-windows-x86_64-8650949.exe
新增資料庫books,新增集合author
增刪改查
// 插入
db.author.insertOne({"name":"mingson", "age":25})
db.author.insertOne({"name":"jesse", "age":18})
db.author.insertOne({"name":"bobo", "age":18})
// 查詢
db.getCollection('author').find({"name":"mingson"})
db.getCollection('author').find({"name":{$eq:"mingson"}})
// 更新
db.author.updateOne({"name":"mingson"},{$set:{"age":20}})
// 刪除
db.author.deleteOne({"name":"bobo"})
// 返回欄位,1返回,0不返回
db.getCollection('author').find({"name":"mingson"},{"name":1,"_id":0})
2.5.2 MongoDB -- 基礎
mongo db 文件:
https://docs.mongodb.com/manual/introduction/
中文 mongo db 手冊:
https://mongoing.com/docs/tutorial/insert-documents.html
資料庫/集合/文件
database/collection/document
mongo | mysql |
---|---|
database | database |
collection | table |
document | row |
filed | column |
資料庫
- 資料庫的名稱是大小寫敏感
不能包含以下字元(win):/\."$*<>:|?
不能包含以下字元(unix/linux):/\."$
- 不能超過64個字元
集合
- 不能包含$
- 不能為空,不能包含null
- 不能以system.開頭
欄位名
- 不能為空,不能包含null
- 頂級欄位不能以$開頭
- _id是保留欄位名稱
BosnTypes
https://mongoing.com/docs/reference/bson-types.html
string | string |
---|---|
bool | Boolean |
int | int |
long | long |
decimal | decimal |
double | double |
date | date |
timestamp | timestamp |
null | null |
- object
- array
- objectid
- regex
- javascripe
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。
歡迎轉載、使用、重新發布,但務必保留文章署名 鄭子銘 (包含連結: http://www.cnblogs.com/MingsonZheng/ ),不得用於商業目的,基於本文修改後的作品務必以相同的許可釋出。
如有任何疑問,請與我聯絡 (MingsonZheng@outlook.com) 。