暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库 ▸ MongoDB终极指南(上)

米修在线 2022-03-16
312

MongoDB 是一个基于 NoSQL 文档的数据库。本质上,MongoDB 中的所有数据都存储在 JSON 文档中,这些文档根据数据类型分类到各种集合中。由于其具有易用性和拥有强大的功能,当下已经成为最受欢迎的 NoSQL 数据库之一。
本篇文章,介绍 MongoDB 中的入门概念和功能,让你快速认识它!
下一篇章我们将进入高级概念的分享。
那下面我们就一起来快速入门MongoDB吧!


(一)

ON

一、安装

为了开始使用 MongoDB,我们首先需要将 MongoDB 安装到计算机上。当然还需要一种与 MongoDB 交互的方法,这就是命令行工具 Mongosh 的用武之地。安装 MongoDB 时,请确保下载社区版而不是企业版。以下是这两个工具的下载链接。

MongoDB:https://docs.mongodb.com/manual/installation 

Mongosh:https ://docs.mongodb.com/mongodb-shell/install

安装这两个工具后,只需打开终端并输入mongosh
即可开始使用 MongoDB。


(二)

TWO

二、相关术语

为了理解 MongoDB,我们首先需要谈谈与 MongoDB 数据库相关的一些基本术语。

数据库

数据库只是集合的容器。MongoDB 中的数据库在概念上与 SQL 中的数据库相同,通常一个项目将拥有一个包含不同集合的数据库。

集合

集合是数据库中的一组文档。这在概念上与 SQL 数据库中的表相同。通常每个数据模型都有一个集合。例如,你的应用可能有用户、帖子和产品集合。

文档

文档只是集合中的记录。这在概念上与 SQL 表中的行相同。文档通常表示集合中的一个对象。在 MongoDB 中,文档本质上只是一个 JSON 对象。

字段

字段只是文档中的键值对。这在概念上与 SQL 中的列相同。每个文档都包含许多字段,其中包含姓名、地址、爱好等信息。SQL 和 MongoDB 之间的一个重要区别是,字段可以包含 JSON 对象和数组等值,而不仅仅是字符串、数字、布尔值等.

此外,MongoDB 文档可以在同一个集合中定义不同的字段。在 SQL 中,表中的所有行必须具有相同的列,但在 MongoDB 中,用户集合中的一个文档可以具有字段名称和年龄,而另一个用户文档可以具有字段名称、地址和爱好。

(三)

THREE

三、基本命令

在开始处理数据之前,我们首先需要了解一些允许处理数据库的基本命令。

mongosh

第一个命令是mongosh
命令。该命令在终端中运行,让我们可以直接访问本地安装的 MongoDB 。本文中的所有未来命令都将在此mongosh
提示符下运行。

show dbs

show dbs
命令是一个显示所有 MongoDB 数据库的简单命令。如果你运行它,会注意到在安装 MongoDB 时已经创建了一些数据库。

use <dbname>

此命令允许你切换到基于dbname
变量的数据库。例如,use mydb
将切换到mydb
数据库。如果没有具有该名称的数据库,它仍会交换到该数据库,如果你稍后添加数据,它将自动创建数据库并将数据添加到其中。与 SQL 不同,MongoDB 没有创建数据/集合的命令,因为它们是在你添加数据时自动创建的。

db

此命令仅打印出当前数据库名称。

cls

此命令清除终端屏幕

show collections

如果你连接到数据库,可以运行show collections
以打印出该数据库中所有集合的信息。

db.dropDatabase()

此命令将删除当前数据库及其中的所有数据。这个命令看起来很像 JavaScript 代码,实际上在 MongoDB 中的许多命令都和js代码有点类似。

exit

最后一个基本命令是exit,
使用该命令退出启动的mongosh会话

(四)

FOUR

四、CURD方法

以下命令将是你在 MongoDB 中需要了解的所有 Create、Read、Update 和 Delete 命令。所有这些命令都将在特定数据库中的特定集合上运行。例如,要获取当前数据库中用户表中的所有记录,将编写db.users.find()

1.创建Create

在 MongoDB 中创建文档实际上非常简单,有两种方法可以这样做,而且它们都非常相似。

insertOne

此函数采用单个对象并在指定集合中创建具有指定信息的文档。我们在创建文档时没有传递 ID。这是因为每个 MongoDB 文档都会自动_id添加一个带有唯一 ID 的属性。
    db.users.insertOne({ name: "Kyle" })


    insertMang

    此函数的工作方式与类似insertOne
    ,但它需要插入一个对象数组。

      db.users.insertMany([{ age: 26 }, { name: "Kyle" }])

      2.读取Read

      在 MongoDB 中读取数据要复杂得多,几乎所有关于 MongoDB 的困惑都来自于此。

      find

      如果要获取单个集合中的所有文档,则可以使用该find
      方法而无需其他参数。

        db.users.find()

        find (<filterObject>)

        通常,当你获取文档时,只想获取其中的一些。如果你将一个对象传递给该find
        方法,它将返回与该过滤器对象匹配的所有文档。默认情况下,过滤器对象将进行相等比较,如果你在同一个过滤器对象中传递多个字段,它将仅返回与过滤器中的所有字段匹配的文档。

          db.users.find({ name: "Kyle" })


          db.users.find({ "address.zip": "12345" })

          find (<filterObject>,<selectObject>)

          使用该find
          方法的最后一种方法是传递第二个对象来选择要返回的字段。该对象包含一个作为字段的键和一个 0 或 1 的值,以确定是否返回该字段。默认情况下,_id
          除非明确告知,否则始终返回该属性。

            db.users.find({ name: "Kyle" }, { name: 1, age: 1 })
            db.users.find({}, { age: 0 })

            findOne

            此命令所有方面都与 find 相同,只是它只返回与过滤器匹配的第一个文档。

              db.users.findOne({ name: "Kyle" })

              countDocuments

              这个最终方法返回与传递给它的过滤器匹配的所有文档的计数。

                db.users.countDocuments({ name: "Kyle" })

                3.更新Update

                在 MongoDB 中更新文档比在 SQL 中要复杂一些,因为实际上有许多不同的方法可以更新文档。

                updateOne

                更新文档的主要方法是使用updateOne
                函数。这将更新与传递给它的过滤器匹配的第一个文档,然后将根据第二个参数中传递的信息更新文档updateOne
                。第二个参数采用一系列不同的选项,后面进入高阶部分会详细说明。

                  db.users.updateOne({ age: 20 }, { $set: { age: 21 } })

                  updateMang

                  这与 updateOne完全相同
                  ,但它将更新与过滤器对象匹配的所有文档,而不仅仅是第一个。

                    db.users.updateMany({ age: 14 }, { $incr: { age: 2 } })

                    replaceOne

                    这与 类似updateOne
                    ,但它将替换整个文档,而不仅仅是更新特定字段。通常这不是你想要做的事情,因为它会删除对象中未在传递给的对象中指定的所有字段(id 字段除外)

                      db.users.replaceOne({ age14 }, { name"Kyle" })

                      4.删除Delete

                      在 MongoDB 中删除非常简单。

                      deleteOne

                      此方法将删除与传递给它的过滤器对象匹配的第一个对象。

                        db.users.deleteOne({ age20 })

                        deleteMang

                        这与过滤器对象相同,deleteOne
                        但它将删除与过滤器对象匹配的所有文档,而不仅仅是一个。

                          db.users.deleteMany({ age14 })
                          总结

                          看到这里,相信你对MongoDB已经有了一个初步认识,掌握CRUD方法只能满足对MongoDB的基本需求,实际开发中我们还需要学习更多高级的MongoDB概念,而这些内容将在下一篇文章进行分享,也期待你的关注!


                          3月大促上线啦


                          腾讯课堂购买《2022年度VIP会员课程包》可享受抽奖福利

                          已有多名购课同学获奖,赶快购课参与活动!



                          课程包介绍涵盖已有的前后端23套课程及2022年计划录制的新课。

                          课程包含内容:

                          1、前端零基础入门

                          2、主流框架学习及实战应用

                          3、NodeJS及小程序、跨平台

                          4、面试集训营

                          5、前端工具

                          6、后端零基础入门及框架应用


                          购买方式:

                          安卓用户:扫描下方二维码,即可进入腾讯课程平台进行购买。

                          苹果用户:扫描下方二维码,添加助教微信,单独开通腾讯课堂购买链接。


                          更多详情

                          扫码咨询

                          微信号|mixiu1573

                          腾讯课堂|网易云课堂

                          文章转载自米修在线,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论