前言

本教程基于飞牛系统 fnOS 0.9.15Docker Compose 功能进行搭建。

简介

MongoDB 是一款高性能、开源、无 schema(模式)的文档型数据库,属于 NoSQL(非关系型数据库)的一种。它以灵活的文档模型、良好的可扩展性和强大的查询能力,广泛应用于各类互联网应用、大数据场景和敏捷开发项目中。

特点

  1. 文档模型(Document Model)

    • 数据以 BSON(Binary JSON)格式存储,类似 JSON 文档,支持嵌套结构和数组,能自然映射对象模型(如编程语言中的类和对象)。

    • 示例文档:

      {
        "_id": ObjectId("60d21b4667d0d8992e610c85"),
        "name": "MongoDB",
        "type": "database",
        "features": ["document-oriented", "schema-less", "high performance"],
        "version": 6.0,
        "metadata": {
          "releaseDate": "2022-07-12",
          "license": "SSPL"
        }
      }
    • 无需预定义表结构(schema),字段可动态添加,适合需求频繁变化的场景。

  1. 高性能

    • 支持内存映射存储,频繁访问的数据可缓存在内存中,读写速度快。

    • 索引机制丰富,支持单字段索引、复合索引、地理空间索引、文本索引等,优化查询效率。

  2. 高可用性与容错

    • 通过 副本集(Replica Set) 实现高可用:由主节点(Primary)、从节点(Secondary)和仲裁节点(Arbiter)组成,主节点故障时自动选举新主节点,确保服务不中断。

    • 数据自动同步到从节点,具备数据冗余和故障恢复能力。

  3. 水平扩展能力

    • 支持 分片(Sharding):将数据按分片键(Shard Key)分布到多个分片集群,突破单节点存储和性能瓶颈,可线性扩展。

  4. 丰富的查询与聚合功能

    • 支持复杂查询(如范围查询、正则匹配、嵌套文档查询)、更新和删除操作。

    • 提供 聚合管道(Aggregation Pipeline),可实现数据过滤、分组、排序、计算等复杂数据分析,类似 SQL 中的 GROUP BY​JOIN​

MongoDB 与关系型数据库的对比

特性

关系型数据库(如 MySQL)

MongoDB

数据模型

二维表(行、列),严格 schema

BSON 文档,无固定 schema

存储单位

表(Table)、行(Row)

集合(Collection)、文档(Document)

关联关系

通过外键(Foreign Key)关联

嵌套文档或引用(Reference)

事务支持

强事务 ACID 特性

3.0+ 支持多文档事务(ACID)

扩展方式

垂直扩展(升级硬件)

水平扩展(分片集群)

适用场景

结构化数据、复杂事务(如银行)

非结构化 / 半结构化数据、高并发读写(如社交、电商)

适用场景

  1. 灵活的数据结构:如内容管理系统(CMS)、博客平台,字段频繁变更无需修改表结构。

  2. 高并发读写:如电商商品信息、用户行为日志,支持快速插入和查询。

  3. 大数据存储与分析:结合分片和聚合管道,处理海量数据(如物联网传感器数据、日志分析)。

  4. 敏捷开发:迭代速度快,无需前期严格设计 schema,加速开发周期。

部署

  1. 打开Docker管理器,选择「Compose」,点击右上角「新增项目」。

  2. 在创建项目窗口中填写「项目名称」和选择数据存放「路径」,然后选择「创建docker-compose.yml」,将下列代码根据自己实际情况修改后复制粘贴进去。

    version: '3.8'
    
    services:
      mongodb:
        image: mongo:6.0
        container_name: mongodb
        restart: always
        ports:
          - "27017:27017"
        volumes:
          - ./data/db:/data/db # 数据持久化
        environment:
          MONGO_INITDB_ROOT_USERNAME: root
          MONGO_INITDB_ROOT_PASSWORD: p@ssw0rd

    勾选「创建项目后立即启动」,最后点击「确定」。

使用

使用数据库管理工具进行连接,「连接名称」根据自己喜好进行命名,「主机」则输入自己的NAS设备的IP地址,「端口」使用你设置的端口号,「密码」则输入你设置的数据库访问密码。

此处演示使用的是“Navicat”数据库管理工具,也可以选择其他数据库管理工具,比如MongoDB CompassRobo 3T等。