MongoDB 基础教程:安装、配置与使用 – wiki基地


MongoDB 基础教程:安装、配置与使用

1. 简介

MongoDB 是一个开源的、高性能、可扩展的 NoSQL 数据库。与传统的关系型数据库(如 MySQL、PostgreSQL)不同,MongoDB 采用文档模型(BSON,类似 JSON 格式)来存储数据,这意味着它更灵活,能够更好地处理非结构化和半结构化数据。它的特点包括:

  • 文档模型: 数据以灵活的 JSON-like 文档形式存储。
  • 高可用性: 通过复制集(Replica Sets)提供数据冗余和自动故障转移。
  • 横向扩展: 通过分片(Sharding)支持大数据量的存储和高并发读写。
  • 丰富的查询语言: 支持强大的查询表达式、聚合框架等。
  • 高性能: 内置索引支持,内存映射存储引擎等。

MongoDB 广泛应用于各种场景,如大数据、内容管理、移动应用后端、物联网等。

2. 安装 MongoDB

MongoDB 提供了多种安装方式,包括使用包管理器、下载二进制文件或使用 Docker。下面我们将介绍在主流操作系统上的安装方法。

2.1 Windows

  1. 下载 MongoDB Community Server: 访问 MongoDB 官方下载中心 (https://www.mongodb.com/try/download/community)。
  2. 选择版本和平台: 选择最新的稳定版,并确保平台是 Windows。下载 MSI 安装包。
  3. 运行安装程序: 双击下载的 .msi 文件,启动安装向导。
  4. 选择安装类型: 建议选择 Complete 安装,这将安装所有组件。
  5. 服务配置:
    • Service Configuration 步骤,通常选择 Run service as Network Service user
    • 记录下 Data DirectoryLog Directory 的路径,默认通常在 C:\Program Files\MongoDB\Server\<version>\dataC:\Program Files\MongoDB\Server\<version>\log
  6. 安装 MongoDB Compass(可选): 勾选安装 MongoDB Compass,这是一个官方提供的 GUI 工具,方便管理和查询数据。
  7. 完成安装: 按照向导指示完成安装。
  8. 添加到 PATH (可选但推荐): 将 MongoDB 的 bin 目录(例如 C:\Program Files\MongoDB\Server\<version>\bin)添加到系统的环境变量 Path 中,这样就可以在任何命令行窗口直接运行 mongomongosh 命令。

2.2 macOS

通过 Homebrew 安装是最推荐的方式。

  1. 安装 Homebrew (如果尚未安装):
    bash
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. 安装 MongoDB Community Server:
    bash
    brew tap mongodb/brew
    brew install mongodb-community@<version> # 替换 <version> 为你想要的版本,如 6.0
  3. 启动 MongoDB 服务:
    bash
    brew services start mongodb-community@<version>

    你也可以手动启动:
    bash
    mongod --config /opt/homebrew/etc/mongod.conf # 或 /usr/local/etc/mongod.conf
  4. 停止 MongoDB 服务:
    bash
    brew services stop mongodb-community@<version>

2.3 Linux (Ubuntu/Debian)

以 Ubuntu 为例,其他发行版类似。

  1. 导入 MongoDB 公钥:
    bash
    wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

    (注意:apt-key 在新版 Ubuntu 中可能被弃用。对于新版本,推荐使用以下方法创建 keyring 文件:)
    bash
    wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo tee /etc/apt/trusted.gpg.d/mongodb-org-6.0.asc
  2. 为 MongoDB 创建列表文件:
    bash
    echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/<version> multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-<version>.list
    # 替换 <version> 为你想要的 MongoDB 版本,如 6.0
  3. 更新本地包数据库:
    bash
    sudo apt update
  4. 安装 MongoDB 包:
    bash
    sudo apt install -y mongodb-org
  5. 启动 MongoDB 服务:
    bash
    sudo systemctl start mongod
  6. 验证 MongoDB 服务状态:
    bash
    sudo systemctl status mongod

    如果显示 active (running) 则表示启动成功。
  7. 配置开机自启动:
    bash
    sudo systemctl enable mongod

2.4 Docker

使用 Docker 是跨平台和快速部署 MongoDB 的好方法。

  1. 拉取 MongoDB 镜像:
    bash
    docker pull mongo
  2. 运行 MongoDB 容器:
    bash
    docker run --name some-mongo -p 27017:27017 -d mongo

    • --name some-mongo: 为容器指定一个名称。
    • -p 27017:27017: 将容器的 27017 端口映射到主机的 27017 端口。
    • -d: 后台运行。
  3. 连接到容器内的 MongoDB (可选):
    bash
    docker exec -it some-mongo mongosh

    或者直接从宿主机连接 mongosh
  4. 持久化数据: 建议挂载数据卷以避免容器删除时数据丢失:
    bash
    docker run --name some-mongo -p 27017:27017 -v /your/data/path:/data/db -d mongo
    # 替换 /your/data/path 为你希望存储 MongoDB 数据的本地路径

3. 配置 MongoDB

MongoDB 的主要配置文件是 mongod.conf(或 mongodb.conf)。在 Windows 上,默认路径通常是 C:\Program Files\MongoDB\Server\<version>\bin\mongod.cfg;在 Linux/macOS 上,通常在 /etc/mongod.conf/usr/local/etc/mongod.conf

以下是一些常见的配置项:

“`yaml

mongod.conf 示例

数据存储目录

storage:
dbPath: /var/lib/mongodb # MongoDB 数据文件存放路径
journal:
enabled: true # 启用日志,确保数据完整性

系统日志配置

systemLog:
destination: file # 日志输出到文件
logAppend: true # 日志追加模式
path: /var/log/mongodb/mongod.log # 日志文件路径

网络配置

net:
port: 27017 # MongoDB 监听端口
bindIp: 127.0.0.1 # 监听的 IP 地址,默认为本地回环地址。
# 如果需要外部访问,可以设置为 0.0.0.0 (不推荐生产环境) 或指定特定 IP。

安全配置 (非常重要,尤其是生产环境)

security:
authorization: enabled # 启用用户认证,强烈建议开启!
# 开启后,需要创建用户并使用用户名密码连接。

复制集配置 (用于高可用性)

replication:
replSetName: “myReplicaSet” # 复制集名称

分片配置 (用于横向扩展)

sharding:
clusterRole: configsvr # 或者 shardsvr
“`

重要提示:

  • bindIp 默认 127.0.0.1 意味着 MongoDB 只能从本机访问。如果需要从其他机器访问,必须修改为服务器的 IP 地址或 0.0.0.0 (允许所有 IP 访问,但生产环境应谨慎使用,并配合防火墙和授权)。
  • security.authorization: enabled 强烈建议在生产环境中启用用户认证! 启用后,你需要创建用户并为其分配角色,否则任何人都无法对数据库进行操作。

修改配置后,需要重启 MongoDB 服务才能生效。

  • Linux: sudo systemctl restart mongod
  • macOS (Homebrew): brew services restart mongodb-community@<version>
  • Windows: 通过服务管理器重启 MongoDB Server (MongoDB) 服务。

4. 连接 MongoDB

MongoDB 提供了一个交互式 shell mongosh(新版)或 mongo(旧版),以及各种语言的驱动程序。

4.1 使用 mongosh Shell

打开命令行或终端,输入 mongosh(或 mongo):

bash
mongosh

如果连接到远程服务器或非默认端口,可以使用:

bash
mongosh "mongodb://<host>:<port>"
mongosh "mongodb://localhost:27017" # 默认连接

如果启用了认证:

bash
mongosh "mongodb://<username>:<password>@<host>:<port>/<database>"

连接成功后,你会看到 > 提示符,可以开始执行命令。

4.2 创建管理员用户 (如果启用了认证)

在连接到 MongoDB 后(首次连接时可能不需要认证,或以 localhost 方式连接),你需要创建一个管理员用户。

  1. 切换到 admin 数据库:
    javascript
    use admin
  2. 创建用户:
    javascript
    db.createUser({
    user: "adminUser",
    pwd: "yourStrongPassword",
    roles: [{ role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }]
    })

    • userAdminAnyDatabase 角色允许在任何数据库上进行用户管理。
    • readWriteAnyDatabase 角色允许在任何数据库上进行读写操作。
  3. 退出并重新连接: 退出 mongosh,然后使用新创建的管理员用户和密码重新连接:
    bash
    mongosh "mongodb://adminUser:yourStrongPassword@localhost:27017/admin"

    或者在 mongosh 中连接后:
    javascript
    use admin
    db.auth("adminUser", "yourStrongPassword")

5. MongoDB 基本使用 (CRUD 操作)

以下是使用 mongosh 进行基本 CRUD (Create, Read, Update, Delete) 操作的示例。

5.1 选择数据库

javascript
use myDatabase // 如果数据库不存在,MongoDB 会在第一次插入数据时创建它

这将切换到名为 myDatabase 的数据库。

5.2 插入数据 (Create)

数据存储在集合 (Collections) 中,集合类似于关系型数据库中的表。
每个文档 (document) 都是一个 BSON 对象。

插入单个文档:
javascript
db.users.insertOne({
name: "Alice",
age: 30,
city: "New York",
email: "[email protected]",
interests: ["coding", "reading"]
})

* users 是集合的名称。如果 users 集合不存在,MongoDB 会自动创建它。

插入多个文档:
javascript
db.products.insertMany([
{ name: "Laptop", brand: "Dell", price: 1200, inStock: true },
{ name: "Mouse", brand: "Logitech", price: 25, inStock: true },
{ name: "Keyboard", brand: "Razer", price: 80, inStock: false }
])

5.3 查询数据 (Read)

查询所有文档:
javascript
db.users.find() // 返回 users 集合中的所有文档
db.products.find().pretty() // .pretty() 方法以易读的格式显示结果

按条件查询:
“`javascript
// 查询 age 等于 30 的用户
db.users.find({ age: 30 })

// 查询 name 为 “Laptop” 的产品
db.products.find({ name: “Laptop” })

// 查询 price 大于 100 的产品
db.products.find({ price: { $gt: 100 } }) // $gt: greater than (大于)

// 查询 price 小于等于 50 的产品
db.products.find({ price: { $lte: 50 } }) // $lte: less than or equal to (小于等于)

// 查询 inStock 为 true 且 price 小于 100 的产品
db.products.find({ inStock: true, price: { $lt: 100 } })

// 查询 interests 包含 “coding” 的用户
db.users.find({ interests: “coding” })

// 查询 age 为 25 或 30 的用户 (OR 查询)
db.users.find({ $or: [{ age: 25 }, { age: 30 }] })
“`

投影 (Projection):
选择返回文档的特定字段。1 表示包含,0 表示排除(_id 字段默认包含,如果要排除需要显式设置 _id: 0)。

javascript
// 只返回 name 和 email 字段
db.users.find({}, { name: 1, email: 1, _id: 0 })

5.4 更新数据 (Update)

更新单个文档:
javascript
// 将 name 为 "Alice" 的用户的 age 更新为 31
db.users.updateOne(
{ name: "Alice" }, // 查询条件
{ $set: { age: 31 } } // 更新操作符
)

* $set 操作符用于设置字段的值。如果字段不存在,则会添加该字段。

更新多个文档:
javascript
// 将所有 inStock 为 true 的产品价格增加 10
db.products.updateMany(
{ inStock: true },
{ $inc: { price: 10 } } // $inc 操作符用于增加字段的值
)

替换文档:
replaceOne 会完全替换一个文档,除了其 _id

javascript
db.users.replaceOne(
{ name: "Alice" },
{
name: "Alicia",
status: "active",
lastLogin: new Date()
}
)

注意: 替换后,原文档中 _id 以外的所有字段都会被新文档覆盖,旧文档中存在的但新文档中没有的字段将被移除。

5.5 删除数据 (Delete)

删除单个文档:
javascript
// 删除 name 为 "Alicia" 的用户
db.users.deleteOne({ name: "Alicia" })

删除多个文档:
javascript
// 删除所有 inStock 为 false 的产品
db.products.deleteMany({ inStock: false })

删除集合:
javascript
db.products.drop() // 删除整个 products 集合

删除数据库:
javascript
use myDatabase
db.dropDatabase() // 删除当前所在的数据库

6. 总结

本教程介绍了 MongoDB 的基础知识,包括其特点、在不同操作系统上的安装方法、核心配置文件 mongod.conf 的重要配置项,以及如何使用 mongosh 进行连接和执行基本的 CRUD 操作。

MongoDB 的强大功能远不止于此,包括索引、聚合框架、复制集、分片、事务等高级特性,这些都是在实际应用中提升性能、可用性和扩展性的关键。建议继续深入学习官方文档,探索更多功能,并结合实际项目进行实践。


滚动至顶部