MongoDB 4.2基本用法以及Mongoose的使用(长文)

本文提供MongoDB 4.2的基本概念和操作教程,包括Collection、Document和BSON的解释,以及MongoDB CRUD操作的详细步骤。同时介绍了在Node.js项目中使用Mongoose进行数据操作,包括Schema、Model和Document的概念和用法,帮助读者快速入门MongoDB和Mongoose的使用。
摘要由CSDN通过智能技术生成

一、前言

本来在前言里面写了一堆数据库类型介绍、为什么要学习Mongodb数据库等等,后来我又全删了,这种概念的东西看了也只能混个脸熟,即使明白了也过一阵子忘记了,只有真正用起来了才逐渐明白这些概念,如果刚一开始接触太多概念容易让人迷惑(因为我就这样…),实践出真知嘛。

二、准备

  1. MongoDB 数据库,点我下载
  2. Studio 3T 可视化工具,点我下载
  3. Node.js 环境,点我下载

说一点,这篇文章重点是教你如何快速入门MongoDB,至于如何去安装它们不会花篇幅描述。

这里有一份官方的安装MongoDB的指南Install MongoDB,不过是英文的,你可以使用谷歌翻译。

另外一份官方文档,使用MongoDB Shell 连接数据库,mongo shell

下面是我所安装的版本:

  • MongoDB 4.2
  • Studio 3T 2019.7.0
  • Node 12.8.1

此外,我接下来所讲解的操作都是在MongoDB Shell 环境下进行的,如果需要在其他环境下进行需要安装或引入相关的驱动。当然为了方便,我在可视化工具下进行操作,因为可视化工具集成了MongoDB Shell 环境。

三、基本概念

虽然我提倡不接触那些晦涩难搞的概念,比如事务,但接下来的概念你还是需要知道的!

3.1 Collection和Document

学过SQL的同学应该知道,进行数据库操作有以下操作(略过登陆权限啥的):

  • 创建数据库
  • 建立视图
  • 建表
  • CRUD(增删改查)

上面每一步都需要输入相关的SQL脚本去执行。但是在MongoDB中不需要主动去创建数据,也不需要去建“表”,你只要直接在“表”中插一条数据,那么MongoDB会帮你自动创建数据库和“表”,这是动态进行的,很灵活。这个“表”就是MongoDB中的集合(collection),表中每一条数据都被称为文档。从这我们可以看出来,关系型数据库和非关系型数据库之间的一个区别了吧(当然我还是不会说太多)。

一张图来说明MongoDB数据库集合文档之间的关系:

在这里插入图片描述

  • DBMS:对应多个数据库
  • Collection:一个数据库可以有很多集合(你也可以理解为“表”)
  • Document:一个集合有多个文档(可以理解为一张表有很多数据项)

3.2 BSON

BSON是一种二进制序列化格式,用于在MongoDB中存储文档和进行远程过程调用。 BSON规范位于bsonspec.org

它的数据结构是一种类似JSON的数据结构,可以存储各种类型数据,比如二进制数据图像、视频等。特点如下:

  • 自动识别类型
  • 自动指定_id字段设置为主键,保证不重复
  • 动态添加属性
  • BSON字符串为UTF-8

搞前端的同学肯定明白了,这和JS的灵活性很像啊。连字段都可以动态加入,这也太牛逼了。

四、MongoDB操作

4.1 基本操作

在平时业务中,我们大部分的操作都是CRUD操作,在此之前,先介绍几个基本操作,打开你的MongoDB Shell或者 Studio 3T点击Intelli Shell 都是一样的(个人推荐后者)。

在这里插入图片描述

4.1.1 显示所有数据库
show dbs
4.1.2 显示当前数据库
db
4.1.3 显示所有集合
show collections
4.1.4 删除某个集合
db.<collection>.drop()
4.1.5 删除数据库
db.dropdatabase()
4.1.6 使用某个数据库
use <dbname>

4.2 CRUD操作

上面多次提到了这个CRUD,意思我们都知道了,英文单词就是下面四个:

  • Create:创建文档
  • Read:读取文档
  • Update:更新文档
  • Delete:删除文档

可以说这一小节无疑是最重要的一部分了,上面也提到过了,我们的业务大部分就是增删改查操作了。下面讲解这些命令的时候会有一部分是与SQL的对比,这一部分来自官网(看了半天的英文…)。

以下示例均在数据库my_test,集合students中进行。

4.2.1 插入/创建 文档
(1) 插入一个或者多个文档
db.collection.insert(
   <文档或文档数组>,
   {
   
     writeConcern:<文档>,
     ordered:<boolean> 
   }
)

该方法接受两个参数,第一个参数就是要插入的文档,可以是一个对象表示插入一个文档,也可以是一个对象数组表示插入多个文档。第二个参数一般不需要写,是一些插入配置选项。插入后,会返回一个对象来表明插入的状态。返回的对象属性如下:

{
   
	acknowledged: <boolean>,
	_id: Array
}

下面要介绍的方法和上面的是一样的,只不过下面更加有语义化,推荐使用下方的方法。

(2)插入一个文档
db.collection.insertOne(
   <文档>,
   {
   
     writeConcern:<文档>
   }
)
(3)插入多个文档
db.collection.insertMany(
   <文档或文档数组>,
   {
   
     writeConcern:<文档>,
     ordered:<boolean> 
   }
)

比如我现在向students集合中插入几个文档,

db.students.insertMany(
    [
      {
   
          name: '老曹',
          age: 22,
          gender: '男',
          address: '湘潭',
          like: {
   
              singers: ['中岛美雪', '黄家驹', '张国荣'],
              books: ['你不知道的JavaScript', '吉他自学三月通', '小孩']
          }
      },
      {
   
          name: '老罗',
          age: 24,
          gender: '男',
          address: '南宁',
          like: {
   
              singers: ['泰勒斯威夫特', '杨千嬅'],
              books: ['高等数学', '初级日语', '挪威的森林']
          }
      },
      {
   
          name: '老陈',
          age: 23,
          gender: '女',
          address: '株洲',
          like: {
   
              singers: ['陈奕迅', '林宥嘉'],
              books: ['从你的世界路过', '顾城的诗']
          }
      },
      {
   
          name: '老吴',
          age: 21,
          gender: '女',
          address: '铜仁'
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值