在CentOS上安装MongoDB通常有两种方式:YUM包管理器安装(推荐,简单快捷)和源码编译安装(适合定制化需求)。
/etc/yum.repos.d/mongodb-org-4.4.repo,内容如下:[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7Server/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
执行sudo yum install -y mongodb-org安装MongoDB。启动服务并设置开机自启:sudo systemctl start mongod
sudo systemctl enable mongod
/etc/mongod.conf,修改以下关键参数:
bindIp: 0.0.0.0(允许远程访问,生产环境需限制IP);port: 27017(默认端口,可根据需求调整);security.authorization: enabled(启用权限控制,生产环境必选)。sudo systemctl restart mongod。MongoDB启用权限控制后,需创建用户并分配角色。以admin数据库为例(管理员账户):
// 切换到admin数据库
use admin
// 创建管理员用户(拥有dbOwner权限)
db.createUser({
user: "admin",
pwd: "SecurePassword123!",
roles: [{ role: "dbOwner", db: "admin" }]
})
// 验证用户身份
db.auth("admin", "SecurePassword123!") // 返回1表示成功
为普通数据库(如testdb)创建应用用户:
use testdb
db.createUser({
user: "app_user",
pwd: "AppPass456!",
roles: [{ role: "readWrite", db: "testdb" }] // 读写权限
})
生产环境中,建议为用户分配最小必要权限(如read、readWrite),避免过度授权。
以testdb数据库的students集合为例,演示常用操作:
use testdb
// 插入单条文档
db.students.insert({ name: "张三", age: 20, gender: "男", major: "计算机科学" })
// 插入多条文档
db.students.insertMany([
{ name: "李四", age: 21, gender: "女", major: "数学" },
{ name: "王五", age: 19, gender: "男", major: "物理" }
])
// 查询所有学生
db.students.find()
// 条件查询(年龄大于19岁)
db.students.find({ age: { $gt: 19 } })
// 精确匹配(姓名为“张三”)
db.students.findOne({ name: "张三" })
// 排序(按年龄升序)
db.students.find().sort({ age: 1 })
// 更新单个字段(将“张三”的年龄改为21)
db.students.updateOne({ name: "张三" }, { $set: { age: 21 } })
// 更新多个字段(同时修改年龄和专业)
db.students.updateOne({ name: "李四" }, { $set: { age: 22, major: "统计学" } })
// 批量更新(将所有年龄小于20的学生年龄加1)
db.students.updateMany({ age: { $lt: 20 } }, { $inc: { age: 1 } })
// 删除单个文档(删除“王五”)
db.students.deleteOne({ name: "王五" })
// 删除所有年龄大于21的学生
db.students.deleteMany({ age: { $gt: 21 } })
// 清空集合(谨慎使用)
db.students.remove({})
这些操作是MongoDB日常使用的核心,适用于大多数NoSQL场景。
索引是MongoDB提升查询速度的关键。以下是常见索引操作:
// 在“name”字段上创建升序索引(1表示升序,-1表示降序)
db.students.createIndex({ name: 1 })
// 创建复合索引(同时包含“name”和“age”字段)
db.students.createIndex({ name: 1, age: -1 })
// 创建唯一索引(确保“name”字段值唯一)
db.students.createIndex({ email: 1 }, { unique: true })
db.students.getIndexes() // 列出集合所有索引
db.students.getIndexKeys() // 查看索引字段
db.students.dropIndex("name_1") // 删除指定名称的索引(如“name_1”)
db.students.dropIndexes() // 删除所有索引(保留_id索引)
注意:索引会占用存储空间并影响写入性能,需根据查询需求合理创建。
若需从其他服务器访问CentOS上的MongoDB,需修改配置并开放端口:
/etc/mongod.conf,将bindIp设置为服务器IP或0.0.0.0(允许所有IP访问,生产环境不推荐):net:
bindIp: 192.168.1.100 # 替换为CentOS服务器IP
port: 27017
sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
sudo firewall-cmd --reload
mongo命令连接:mongo --host 192.168.1.100 --port 27017 -u app_user -p AppPass456 --authenticationDatabase testdb
连接成功后会进入MongoDB shell,可执行增删改查操作。定期备份是防止数据丢失的重要措施,MongoDB提供mongodump(备份)和mongorestore(恢复)工具:
mongodump --host 127.0.0.1 --port 27017 --username admin --password SecurePassword123 --authenticationDatabase admin --db testdb --out /backup/mongodb
备份文件会保存在/backup/mongodb/testdb目录下。mongorestore --host 127.0.0.1 --port 27017 --username admin --password SecurePassword123 --authenticationDatabase admin --db testdb /backup/mongodb/testdb
mongodump --host 127.0.0.1 --port 27017 --username admin --password SecurePassword123 --authenticationDatabase admin --db testdb --collection students --out /backup/mongodb
mongorestore --host 127.0.0.1 --port 27017 --username admin --password SecurePassword123 --authenticationDatabase admin --db testdb --collection students /backup/mongodb/testdb/students.bson
注意:备份文件应存储在安全位置(如异地服务器或云存储),避免单点故障。
以上案例覆盖了CentOS环境下MongoDB的核心使用场景,从安装配置到日常运维,满足大多数应用需求。实际使用时,需根据业务场景调整参数(如索引设计、权限分配),确保数据库性能与安全。