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:Xkzh666888@120.77.38.122:27017/archive_db?authSource=admin

pom.xml

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
相关推荐
····懂···1 小时前
开源数据库PostgreSQL专家技术
数据库·postgresql·开源
Asu52021 小时前
思途SQL学习 0729
数据库·sql·学习
北亚数据恢复1 小时前
服务器数据恢复—RAID上层部署的oracle数据库数据恢复案例
数据库·oracle·服务器数据恢复·北亚数据恢复
不辉放弃2 小时前
kafka的消息存储机制和查询机制
数据库·kafka·pyspark·大数据开发
一位搞嵌入式的 genius2 小时前
暑期自学嵌入式——Day10(C语言阶段)
linux·笔记·学习·嵌入式c语言
ZZH1120KQ3 小时前
ORACLE的用户维护与权限操作
数据库·oracle
妮妮喔妮4 小时前
图片上传 el+node后端+数据库
javascript·数据库·vue.js
晨非辰4 小时前
#C语言——学习攻略:深挖指针路线(三)--数组与指针的结合、冒泡排序
c语言·开发语言·数据结构·学习·算法·排序算法·visual studio
先生沉默先5 小时前
Docker学习日志-Docker容器配置、Nginx 配置与文件映射
学习·nginx·docker
仰望星空的凡人9 小时前
【JS逆向基础】数据库之MongoDB
javascript·数据库·python·mongodb