應用場景
評論區
TODO
docker 部署 MongoDB
version: '3'
services:
mongo:
image: mongo:6.0.4
container_name: mongoDB
restart: always
ports:
- 27017:27017
volumes:
- /data/mongodb/data:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
mongo-express: # web 管理介面 初始密碼:admin:pass
image: mongo-express
container_name: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: root
ME_CONFIG_MONGODB_URL: mongodb://root:root@mongo:27017/
基本操作
// 查詢所有資料庫(僅限於磁碟上的,不包括記憶體中的)
show databases
// 檢視當前正在使用的資料庫
db
// 刪除資料庫:該命令需要先使用 use 資料庫名稱 命令切換到指定的資料庫
db.dropDatabase()
// 建立集合:可理解為MySQL中的表
db.createCollection('集合名')
// 刪除集合
db.集合名.drop()
建立資料庫
// 如果資料庫不存在則自動建立, 但此時只會在記憶體中建立資料庫,只有當資料庫中有集合中才會從記憶體落盤到硬碟中
use 資料庫名稱
CURD
// 單條記錄插入, 插入的資料如果沒有指定 _id,則系統會為其自動生成主鍵值。
db.article.insert({
"article_id": "100001",
"content": "寫的什麼鬼?",
"user_id": "1001",
"nickname": "許大仙",
"like_num": NumberInt(10), # MongoDB 中的數字,預設情況下是 double 型別;如果需要儲存整數,需要使用 NumberInt(整型數字) 函式。
"create_time": new Date(),
state: null # 如果某個欄位沒有值,可以賦值為 null,或者不寫該欄位
})
// 多條記錄插入
db.article.insertMany([
{
"article_id": "100002",
"content": "2寫的什麼鬼?",
"user_id": "1002",
"nickname": "許大仙2",
"like_num": NumberInt(20),
"create_time": new Date(),
state: null
},
{
"article_id": "100003",
"content": "3寫的什麼鬼?",
"user_id": "1003",
"nickname": "許大仙3",
"like_num": NumberInt(20),
"create_time": new Date(),
state: null
}
])
// 查詢user_id 欄位為1001 的資料
db.article.find({"user_id":"1001"})
// 投影:只展示部分列
// 只顯示 user_id 和 nickname: 1 表示顯示,0 表示隱藏
db.article.find({},{"user_id":1,"nickname":1})
// 將 user_id 為 1001 的文件的 like_num 設定為 1000 (只修改一個文件,即一條記錄)
db.article.update({user_id:1001},{$set:{like_num:1000}})
// 批次修改
db.article.update({user_id:'1001' }, {$set:{nickname:'許大仙人'}}, {multi:true})
// 刪除文件
db.article.deleteMany({user_id:'1001'})
索引
空間換時間
// 建立索引:1表示升序,-1 表示降序
db.agg.createIndex({name:1,age:-1})
// 檢視索引
db.agg.getIndexes()
// 刪除索引
db.agg.dropIndex({name:1,age:-1})