mongodb学习

一、安装

1. 准备安装环境

bash 复制代码
# 更新系统软件包
sudo yum update -y

# 安装基础依赖
sudo yum install -y libcurl openssl

2.创建MongoDB仓库文件

bash 复制代码
// centos7
sudo tee /etc/yum.repos.d/mongodb-org-4.4.repo <<EOF
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
EOF
bash 复制代码
// centos8
sudo tee /etc/yum.repos.d/mongodb-org-8.0.repo <<EOF
[mongodb-org-8.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/8/mongodb-org/8.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-8.0.asc
EOF

3.安装 MongoDB 软件包

bash 复制代码
sudo yum install -y mongodb-org

4.配置 MongoDB

bash 复制代码
sudo vi /etc/mongod.conf
bash 复制代码
net:
  port: 27017
  bindIp: 0.0.0.0  # 如需远程访问,改为0.0.0.0

security:
  authorization: enabled  # 启用认证

5. 启动 MongoDB 服务

bash 复制代码
sudo systemctl status mongod
sudo systemctl start mongod
sudo systemctl enable mongod

6.创建管理员用户

连接到 MongoDB 服务器:
bash 复制代码
mongosh 
# MongoDB 服务器运行在非默认端口或者远程服务器上
mongosh --host <hostname>:<port>
# 启用身份验证后,你需要使用创建的用户身份连接到 MongoDB:
mongosh --host <hostname> --port <port> -u "testuser" -p "password123" --authenticationDatabase "<database_name>"
bash 复制代码
use admin
db.createUser({
  user: "admin",
  pwd: "YourSecurePassword123!", // 请改为强密码
  roles: [ 
    { role: "userAdminAnyDatabase", db: "admin" },
    { role: "readWriteAnyDatabase", db: "admin" },
    { role: "dbAdminAnyDatabase", db: "admin" },
    { role: "clusterAdmin", db: "admin" }
  ]
})
exit
bash 复制代码
use test
db.createUser({
  user: "testuser",
  pwd: "password123",
  roles: [
    { role: "readWrite", db: "<database_name>" },
    { role: "dbAdmin", db: "<database_name>" }
  ]
})
删除用户
bash 复制代码
db.dropUser("testuser")

7.重启服务使认证生效

bash 复制代码
sudo systemctl restart mongod

8. 维护(可选)与常见问题解决

备份
bash 复制代码
# 定期备份:
mongodump --uri="mongodb://admin:Xkzh666888@localhost:27017" --out=/backup/mongodb-$(date +%F)
设置定期维护任务:
# 每月重建索引
echo "0 3 1 * * mongo --eval 'db.getSiblingDB(\"admin\").runCommand({reIndex: \"system.profile\"})'" | sudo tee -a /etc/crontab
重建索引
1.手动重建单个集合索引
javascript 复制代码
use yourDatabase
db.yourCollection.reIndex()
2. 自动化脚本(每月执行)
bash 复制代码
#!/bin/bash
# 每月1日凌晨3点执行
MONGO_URI="mongodb://admin:password@localhost:27017/admin?tls=true"

# 获取所有数据库(排除系统库)
DATABASES=$(mongo "$MONGO_URI" --quiet --eval "db.adminCommand({listDatabases:1}).databases.forEach(function(d){if(!['admin','local','config'].includes(d.name))print(d.name)})")

# 遍历数据库重建索引
for DB in $DATABASES; do
  COLLECTIONS=$(mongo "$MONGO_URI" --quiet --eval "db.getSiblingDB('$DB').getCollectionNames().forEach(function(c){print(c)})")
  
  for COL in $COLLECTIONS; do
    echo "重建 $DB.$COL 索引..."
    mongo "$MONGO_URI" --quiet --eval "db.getSiblingDB('$DB').getCollection('$COL').reIndex()"
  done
done
3. 通过 crontab 设置定时任务
bash 复制代码
# 编辑定时任务
sudo crontab -e

# 添加以下内容(每月1日凌晨3点执行)
0 3 1 * * /path/to/your/reindex_script.sh >> /var/log/mongodb/reindex.log 2>&1
4. 重建效果验证
javascript 复制代码
// 查看索引大小变化
db.collection.stats().indexSizes

// 检查查询执行计划
db.collection.find({yourQuery}).explain("executionStats")
8.3 常见问题解决
bash 复制代码
# 查看错误日志
sudo cat /var/log/mongodb/mongod.log

# 常见问题1:数据目录权限
sudo chown -R mongod:mongod /var/lib/mongo

# 常见问题2:端口占用
sudo netstat -tulnp | grep 27017

9.基本操作

  • 查看当前数据库:db
  • 显示数据库列表:show dbs
  • 切换到指定数据库:use <database_name>
  • 执行查询操作:db.<collection_name>.find()
  • 插入文档:db.<collection_name>.insertOne({ ... })
  • 更新文档:db.<collection_name>.updateOne({ ... })
  • 删除文档:db.<collection_name>.deleteOne({ ... })
  • 退出 MongoDB Shell:quit() 或者 exit
c 复制代码
# 启动 MongoDB Shell
mongosh

# 连接到本地 MongoDB 服务器
test> show dbs
admin   40.00 KiB
config  72.00 KiB
local   40.00 KiB
runoob  72.00 KiB
test> use runoob
switched to db runoob

# 插入文档
runoob> db.mycollection.insertOne({ name: "Alice", age: 30 })
{
  acknowledged: true,
  insertedId: ObjectId('667cd8789a69705686ed70f2')
}


# 查询文档
runoob> db.mycollection.find()
[
  { _id: ObjectId('667cd8789a69705686ed70f2'), name: 'Alice', age: 30 }
]

# 更新文档
runoob> db.mycollection.updateOne({ name: "Alice" }, { $set: { age: 31 } })
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}

# 删除文档
runoob> db.mycollection.deleteOne({ name: "Alice" })
{ acknowledged: true, deletedCount: 1 }

# 退出 MongoDB Shell
runoob> quit()

二、项目使用

application.yml

yaml 复制代码
# Spring配置
spring:
  data:
    mongodb:
      uri: mongodb://admin:[email protected]:27017/archive_db?authSource=admin

pom.xml

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
相关推荐
lcw_lance44 分钟前
业务中台-典型技术栈选型(微服务、容器编排、分布式数据库、消息队列、服务监控、低代码等)
数据库·分布式·微服务
lichuangcsdn1 小时前
【springcloud学习(dalston.sr1)】Eureka单个服务端的搭建(含源代码)(三)
学习·spring cloud·eureka
靡樊1 小时前
网络基础概念
linux·服务器·网络·c++·学习
JhonKI1 小时前
【MySQL】变更缓冲区:作用、主要配置以及如何查看
数据库·mysql
TDengine (老段)1 小时前
什么是物联网 IoT 平台?
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
郭尘帅6661 小时前
vue3基础学习(上) [简单标签] (vscode)
前端·vue.js·学习
虾球xz2 小时前
游戏引擎学习第279天:将实体存储移入世界区块
c++·学习·游戏引擎
yanyanwenmeng2 小时前
智能体制作学习笔记2——情感客服
笔记·学习
boring_1112 小时前
从Aurora 架构看数据库计算存储分离架构
数据库·架构
Cloud Traveler2 小时前
从 “学会学习” 到高效适应:元学习技术深度解析与应用实践
人工智能·学习·自然语言处理