2.5.1 MongoDB -- 介紹
- mysql vs mongo
- 快速開始
對比 | mysql | mongo |
---|---|---|
資料存儲 | table 二維表結構,需要預先定義結構 | json 類文檔,不需要預先定義結構。可随意新增或删除字段,新增字段不會對已存在的字段産生影響 |
查詢文法 | sql (structured query language) | |
索引 | 如果不定義索引,則進行全表掃描 | |
叢集 | 支援主從複制 | 内置副本集、分片、和自動選舉 |
場景 | 關系型結構,在多行插入時需要事務保障 | 實時資料分析、内容管理、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
database | |
collection | table |
document | row |
filed | column |
資料庫
- 資料庫的名稱是大小寫敏感
不能包含以下字元(win):/\."$*<>:|?
不能包含以下字元(unix/linux):/\."$
- 不能超過64個字元
集合
- 不能包含$
- 不能為空,不能包含null
- 不能以system.開頭
字段名
- 頂級字段不能以$開頭
- _id是保留字段名稱
BosnTypes
https://mongoing.com/docs/reference/bson-types.htmlstring | |
---|---|
bool | Boolean |
int | |
long | |
decimal | |
double | |
date | |
timestamp | |
null |
- object
- array
- objectid
- regex
- javascripe