5.MongoDB入门指南
Tags: webdev, tutorial, database
Published: 2023-09-08 15:42:50


如果想看专栏的方式可以点击进入[Next图册目实践](http://rexweb.link/categories/Next%E5%9B%BE%E5%86%8C%E7%9B%AE%E5%AE%9E%E8%B7%B5/)

本系列的MongoDB是为了完善Next图层的教学，普及的一点内容。如果你还不熟MongoDB，请关注梦兽编程后续带来的`MongoDB开发手册`。

我们一个项目是需要一个数据存储的地方。当然有很多的数据存放方式，比如`文本`，`json`，`access`，`sqlite`，`xml`等都是一种数据存储的方案。这些数据库一般都是用在客户端暂存一点数据使用的。

在web云数据存储有`mysql`,`mongodb`,`Elasticsearch`,`hadoop`等，这一类的数据存储方案。这一类的数据库主要的特点是可以做集群处理数据量多的时候相比上面提及的提供了更多方法可以让你轻松应对业务场景。

# 1.MongoDB简介

为什么我们需要MongoDB? MongoDB是一种非关系型数据库，它提供了高性能、高可用性和易扩展性。它工作在服务端，用于存储和处理大量的数据，这些数据是以一种易于访问和处理的方式存储的。这使得MongoDB成为处理大数据和实时应用程序的理想选择。此外，MongoDB的文档模型使得数据的存储和查询变得非常灵活，这对于开发者来说是一个巨大的优势。

# 2. MongoDB的安装
在开始安装MongoDB之前，你需要了解MongoDB的系统要求。MongoDB提供了多种安装选项，包括在各种Linux发行版、macOS和Windows上的安装。
MongoDB的系统要求

MongoDB有一些系统要求，包括：

- 64位的操作系统
- 对于Linux系统，需要安装libcurl库
- 对于Windows系统，需要Windows Server 2008 R2或更高版本，或Windows 7或更高版本

这里梦兽编程将以`macOS`进行安装,其他系统请到[MongoDB官网](https://www.mongodb.com/)进行下载对应的安装包。

```shell
brew tap mongodb/brew
brew install mongodb-community@4.4
```
# 3. MongoDB的基本概念

在MongoDB中，有三个基本的概念：文档，集合和数据库。这些概念是MongoDB数据组织的基础。

## 1. 文档

MongoDB中的数据记录被称为文档。文档是一种由字段和值对组成的数据结构，类似于JSON对象。字段的值可以包括其他文档，数组和文档数组。每个文档都有一个特殊的键_id，它在其所在的集合中是唯一的

一个简单的文档示例：

```json
{
  "_id": ObjectId("5099803df3f4948bd2f98391"),
  "name": "MongoDB",
  "type": "database",
  "count": 1,
  "info": {
    "x": 203,
    "y": 102
  }
}
```
> 如果用类比法进行记忆你可以理解成mysql关系型数据中的条中一条数据，对于没有编程经验的小伙伴也不用急。你可以理解成execl表中一行数据。

## 2. 集合
集合是MongoDB文档的容器，类似于关系数据库中的表。一个集合中的文档不需要具有相同的结构或相同的字段。此外，通常情况下，集合不需要被预先创建：它们在插入第一个文档时自动创建

## 3. 数据库
数据库是一个物理容器，用于存储集合。每个数据库都获取自己的一组文件，并在磁盘上被单独存储。MongoDB服务器可以承载多个数据库

# 4. MongoDB的CRUD操作
由于本系列的Dome图层案例，梦兽感觉还是比较简单的。所以有一些比较难的mongodb查询语句就不会过多的在这里细说。可以关注未来的Mongodb系列专栏。

> CRUD是指创建（Create）、读取（Read）、更新（Update）和删除（Delete）四种操作。在MongoDB中，这些操作对应于特定的命令和方法。

## 1. 创建（Insert）操作
在MongoDB中，可以使用insertOne()和insertMany()方法来插入文档到集合中。如果集合不存在，插入操作会自动创建集合

```shell
// 插入一个文档
db.collection.insertOne({name: "MongoDB", type: "database"})

// 插入多个文档
db.collection.insertMany([{name: "MongoDB", type: "database"}, {name: "MySQL", type: "database"}])
```

## 2. 读取（Read）操作
```shell
// 查询所有文档
db.collection.find()

// 查询name为"MongoDB"的文档
db.collection.find({name: "MongoDB"})
```

## 3. 更新（Update）操作
更新操作可以通过updateOne(), updateMany(), 或 replaceOne()方法来实现。这些方法需要一个筛选条件来确定哪些文档需要更新，以及一个更新语句来指定如何更新文档
```shell
// 更新一个文档
db.collection.updateOne({name: "MongoDB"}, {$set: {type: "NoSQL database"}})

// 更新多个文档
db.collection.updateMany({type: "database"}, {$set: {type: "NoSQL database"}})

// 替换一个文档
db.collection.replaceOne({name: "MongoDB"}, {name: "MongoDB", type: "NoSQL database"})
```
## 4. 删除（Delete）操作
删除操作可以通过deleteOne()或deleteMany()方法来实现。这些方法需要一个筛选条件来确定哪些文档需要删除
```shell
// 删除一个文档
db.collection.deleteOne({name: "MongoDB"})

// 删除多个文档
db.collection.deleteMany({type: "NoSQL database"})
```
以上就是MongoDB的基本CRUD操作。在实际使用中，你可能需要根据具体的需求来调整这些操作。

# 结语

在这篇文章中，我们主要了解了MongoDB的基础概念和对数据库的数据的基础操作。希望这篇文章能帮助你更好地理解和使用MongoDB。如果你有任何问题或者需要进一步的帮助，欢迎随时向我提问。

在下一篇文章中，我们将探讨如何使用Node.js和Mongoose库来操作MongoDB数据库。Mongoose是一个强大的、基于Node.js的MongoDB对象模型工具，它可以让我们更方便地在Node.js环境中操作MongoDB。我们将会详细介绍如何使用Mongoose进行数据库的连接、数据的查询、插入、更新和删除等操作。

感谢你的阅读，期待在下一篇文章中再次见到你！



希望这篇文章能帮助你更好地理解和使用Next.js中的数据获取方法。如果你有任何问题或者需要进一步的帮助，欢迎随时向我提问。

![截屏2023-08-17 23.44.00.png](https://x.imgs.ovh/x/2023/09/04/64f5f2c94bf2c.png)

感谢你的阅读，期待在下一篇文章中再次见到你！

这里是梦兽编程，本次的代码更新将会放在Github[本次项目的Github连接](https://github.com/rexleimo/rex-huaban)中的V3.0分支中

[我的B站视频号](https://space.bilibili.com/106325238?spm_id_from=333.1007.0.0)更多视频动态。

![截屏2023-08-18 00.02.24.png](https://x.imgs.ovh/x/2023/09/04/64f5f2c85195a.png)