前言

MongoDB 是目前最流行的文档型 NoSQL 数据库,以高性能、高可用、易扩展、动态 Schema 著称,广泛用于互联网后端、大数据、日志存储、物联网等场景。本文基于官方标准与生产实践,从零开始讲解 MongoDB 核心概念、Linux 安装、Shell 使用、库 / 集合 / 文档操作、用户权限、备份恢复,并提供高频错误解决方案,适合新手入门与运维参考。


一、MongoDB 基础概念

1.1 什么是 MongoDB

MongoDB 是一个面向文档的分布式数据库,数据以 **BSON(二进制 JSON)** 存储,结构灵活,无需预先定义表结构,支持嵌套文档与数组,非常适合快速迭代的业务系统。

1.2 核心优势

  • 文档存储:类 JSON 格式,易读易维护
  • 动态模式:无需固定表结构
  • 水平扩展:支持分片集群
  • 高可用:副本集自动容灾
  • 丰富索引:提升查询效率
  • 强大查询:支持条件、投影、排序、分页、聚合
  • 大文件存储:GridFS 支持超 16MB 文件
  • 多语言驱动:Java/Python/Go/Node.js/PHP 等

1.3 MongoDB 与 SQL 概念对照(表格版)

表格

SQL 术语 MongoDB 术语 说明
数据库(Database) 数据库(Database) 数据存储容器
表(Table) 集合(Collection) 一组文档
行(Row) 文档(Document) 单条数据
列(Column) 字段(Field) 键值对
主键(Primary Key) _id 自动生成唯一 ID
索引(Index) 索引(Index) 加速查询
表连接(JOIN) $lookup 聚合关联
视图(View) 视图(View) 只读逻辑集合

1.4 核心专业术语

表格

术语 含义
BSON 二进制 JSON,MongoDB 存储格式
ObjectId 文档默认主键
副本集 Replica Set 高可用集群
分片 Sharding 水平扩展
聚合 Aggregation 数据统计分析
TTL 索引 自动过期删除
GridFS 大文件存储
CRUD 增删改查

二、MongoDB Linux 安装(CentOS / RHEL)

2.1 安装依赖

dnf install libcurl openssl gcc make perl -y

2.2 解压安装

tar -zxvf mongodb-linux-x86_64-rhel8-8.0.8.tgz
mv mongodb-linux-x86_64-rhel8-8.0.8 /usr/local/mongodb

2.3 配置环境变量

echo 'export PATH=/usr/local/mongodb/bin:$PATH' >> /etc/profile
source /etc/profile

2.4 创建数据与日志目录

mkdir -p /var/lib/mongo
mkdir -p /var/log/mongodb
chown -R mongod:mongod /var/lib/mongo
chown -R mongod:mongod /var/log/mongodb

2.5 安装 OpenSSL 1.1.1(部分版本必需)

tar xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/opt/openssl11 --openssldir=/opt/openssl11/ssl
make -j$(nproc)
make install
echo 'export LD_LIBRARY_PATH=/opt/openssl11/lib:$LD_LIBRARY_PATH' > /etc/profile.d/openssl11.sh
source /etc/profile.d/openssl11.sh

2.6 启动 MongoDB

前台启动(调试)

mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log

后台守护启动(生产)

mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

启动成功提示:

plaintext

about to fork child process, waiting until server is ready for connections.
forked process: 12102
child process started successfully, parent exiting

三、MongoDB Shell(mongosh)使用

3.1 安装 mongosh

tar xzf mongosh-2.5.0-linux-x64-openssl3.tgz
cd mongosh-2.5.0-linux-x64-openssl3/bin
cp mongosh /usr/local/bin
cp mongosh_crypt_v1.so /usr/local/lib

3.2 连接 MongoDB

本地连接

mongosh

远程连接

mongosh --host 192.168.1.10 --port 27017

四、数据库管理

4.1 查看数据库

show dbs

4.2 查看当前数据库

db

4.3 创建 / 切换数据库

MongoDB 使用 use 自动创建数据库

use mydb

4.4 删除数据库

db.dropDatabase()

4.5 系统内置数据库

表格

库名 作用
admin 权限管理、超级用户
config 分片集群元数据
local 本地数据,不复制

五、集合(Collection)管理

5.1 查看集合

show collections
show tables

5.2 创建普通集合

db.createCollection("mycol")

5.3 创建带 JSON Schema 校验的集合(生产常用)

db.createCollection("mycol", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["name", "email"],
      properties: {
        name: { bsonType: "string" },
        email: { bsonType: "string", pattern: "^.+@.+$" }
      }
    }
  },
  validationLevel: "strict",
  validationAction: "error"
})

5.4 集合创建参数(表格)

表格

参数 类型 说明
capped bool 是否固定大小集合
size number 集合最大字节
max number 最大文档数
validator object 文档校验规则
validationLevel string 校验严格程度
validationAction string 校验失败处理
storageEngine object 存储引擎配置

5.5 重命名集合

db.adminCommand({
  renameCollection: "test.mycol",
  to: "test.mycol_new",
  dropTarget: false
})

5.6 删除集合

db.mycol.drop()

六、文档 CRUD 操作(核心)

6.1 插入文档

插入单条

db.mycol.insertOne({
  name: "zhangsan",
  age: 20,
  city: "zhengzhou",
  email: "1011@qq.com"
})

插入多条

db.mycol.insertMany([
  {name:"zhangsan",age:20,city:"zhengzhou",email:"1011@qq.com"},
  {name:"wangwu",age:26,city:"shanghai",email:"1012@qq.com"}
])

6.2 查询文档

查询所有

db.mycol.find()

格式化显示

db.mycol.find().pretty()

条件查询

db.mycol.find({ age: { $gt: 20 } })

查询单条

db.mycol.findOne({ name: "zhangsan" })

投影(指定返回字段)

db.mycol.find({},{name:1,age:1,_id:0})

6.3 更新文档

更新单条

db.mycol.updateOne(
  { name: "zhangsan" },
  { $set: { age: 21 } }
)

更新多条

db.mycol.updateMany(
  { age: { $lt: 30 } },
  { $set: { status: "young" } }
)

替换整个文档

db.mycol.replaceOne(
  { name: "lisi" },
  { name: "lisi02", age: 30, city: "zhongguo", email: "1014@qq.com" }
)

6.4 删除文档

删除单条

db.mycol.deleteOne({ name: "zhangsan" })

删除多条

db.mycol.deleteMany({ age: { $gt: 30 } })

七、MongoDB 常用操作符(表格速查)

7.1 比较操作符

表格

操作符 含义
$eq 等于
$ne 不等于
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$in 在数组中
$nin 不在数组中

7.2 逻辑操作符

  • $and
  • $or
  • $not
  • $nor

7.3 更新操作符

表格

操作符 作用
$set 更新字段
$unset 删除字段
$inc 数字自增 / 自减
$push 向数组添加元素
$pull 从数组删除元素

八、用户与权限管理

8.1 创建用户

use testdb
db.createUser({
  user: "testuser",
  pwd: "password123",
  roles: [
    { role: "readWrite", db: "testdb" },
    { role: "dbAdmin", db: "testdb" }
  ]
})

8.2 常用角色(表格)

表格

角色 权限
read 只读
readWrite 读写
dbAdmin 库管理
userAdmin 用户管理
clusterAdmin 集群管理
root 超级管理员

8.3 带认证启动 MongoDB

mongod --auth --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

8.4 认证登录

mongosh -u "testuser" -p "password123" --authenticationDatabase "testdb"

8.5 删除用户

db.dropUser("testuser")

九、备份与恢复

9.1 安装工具

rpm -ivh mongodb-database-tools-rhel70-x86_64-100.12.0.rpm

9.2 备份(mongodump)

备份所有库

mongodump

备份指定库

mongodump -d testdb -o /backup

9.3 恢复(mongorestore)

恢复所有库

mongorestore

恢复指定库

mongorestore -d testdb /backup/testdb

十、高频错误与解决方案(必看)

10.1 Document failed validation

原因:缺少 Schema 校验的必填字段(如 name、email)解决:插入时补全所有 required 字段

10.2 insertOne 传入数组报错

原因insertOne 只能插入单个对象解决:批量插入用 insertMany

10.3 replaceOne 括号错误(你遇到的问题)

错误写法:

db.mycol.replaceOne({name:"lisi"}),{...};

正确写法:

db.mycol.replaceOne({name:"lisi"}, {...});

10.4 MongoDB 启动失败 exited with 1

原因:数据 / 日志目录权限不属于 mongod解决

chown -R mongod:mongod /var/lib/mongo
chown -R mongod:mongod /var/log/mongodb

十一、总结

本文完整覆盖 MongoDB 从安装到生产实战全流程:

  • 基础概念与 SQL 对照
  • Linux 环境手动编译安装
  • mongosh 使用
  • 库 / 集合管理
  • CRUD 全套操作
  • 用户权限与安全认证
  • 备份恢复
  • 高频错误解决方案

MongoDB 凭借灵活的文档结构、强大的扩展性和易用性,已成为现代 Web 应用首选数据库之一。掌握本文内容,可直接胜任日常开发、测试、运维工作

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐