MongoDB
应用场景
评论区
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})