• mongoDB看这篇就够了


    写在前面的话

    hello,小伙伴们,我是pubdreamcc,本篇文章依然出至于我的GitHub node学习教程,如果你觉得 pubdreamcc 写的还可以的话,希望给个star,谢谢各位的赞赏,你们点赞是我继续更新的动力~

    node学习教程 github

    mongoDB起步

    • 1.安装mongoDB

      安装这里,我就不详细介绍,大家可以根据官网选择匹配自己电脑系统的版本安装即可。

      mongoDB download地址: download

      下载下来之后,点击打开直接下一步,下一步就 ok 了。

    • 2.初体验

      1. 配置环境变量

      安装完成后,会在安装目录下面生成一个 mongoDB 的文件夹,打开文件夹,进入 bin 文件夹中,把这里的路径配置成环境变量。

      1. 创建存储数据库文件 data

      在任意盘符根目录下创建一个 data 目录,用来存放数据库文件。 mongoDB 会自动把自己安装位置的盘符根目录下的 data 文件夹作为自己的数据存储目录,这里也可以直接在安装位置所在盘符创建。

      1. 启动 mongoDB 数据库

      如果 data 目录创建在安装位置的盘符根目录下,直接 打开命令行,敲入:

       mongod

      如果是其他位置,则需要指定数据存放的位置:

       mongod --dbpath 文件路径

      如果看到输出: waiting for connections on port 27017 说明启动数据库成功。

      1. 连接数据库

      再打开一个命令行,敲入 mongo ,则会默认连接到本地开启的数据库。好了,到这里我们就完成了如何开启一个 mongoDB 数据库了,接下来只需往数据库里存数据,操作数据即可。

    MongoDB 概念解析

    mongoDB 作为一个 NoSQL 数据库,对于我们前端学习成本非常低,后期会结合node一起使用。mongoDB 中存储的都是 键值对(key - value),格式类似于 JSON ,操作起来也是非常爽,完全不需要我们有什么 SQL 语言的基础。

    mongodb中有三个基本核心的概念:

    • 文档

    • 集合

    • 数据库

    它们之间是逐层包含的关系,一个集合可以包含多个文档,一个数据库可以有多个集合,下面听我逐一道来:

    文档 : 文档是一个键值(key-value)对(即BSON),本质类似于json对象 的键值对。

    {"name":"pubdreamcc", "age": 24}
     

    集合:集合就是 MongoDB 文档组,实质上就是包含多个对象的数组。

    比如,我们可以将以下不同数据结构的文档插入到集合中:

    {"name":"pubdreamcc"}
    {"name":"pubdreamcc1","name":"pubdreamcc2"}
    {"name":"pubdreamcc3","name":"pubdreamcc4","num":5}
     

    数据库(dataBase)

    这里的数据库概念同 关系型数据库中的数据库概念一致,数据库可以包含多个集合。

    mongoDB基本操作

    在刚才我们连接上本地数据库之后,在这个命令行,我们可以进行很多 mongoDB 提供的增删改查等的基本操作,且听我一一道来。

    • 1.创建数据库 : use 数据库名称

      如果数据库不存在,则创建数据库,否则切换到指定数据库。

      MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

    • 2.查看所有数据库: show dbs

    • 3.删除数据库: db.dropDatabase(),你可以使用 db 命令查看当前数据库名。

    • 4.创建集合: db.createCollection(集合名称)

    • 5.查看已有集合: show collections

    • 6.删除集合:db.集合名称.drop()

      如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false

    • 7.插入文档:db.集合名称.insert(document)。往指定集合插入文档,文档的数据结构和 JSON 基本一样。

    • 8.更新文档: update() 方法用于更新已存在的文档,语法格式:

       db.collection.update(
           <query>,
           <update>,
           {
             upsert: <boolean>,
             multi: <boolean>,
             writeConcern: <document>
           }
         )

      参数说明

      • query : update的查询条件,类似sql update查询内where后面的。

      • update : update的对象和一些更新的操作符(如,inc...)等,也可以理解为sql update查询内set后面的。

      • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

      • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

      • writeConcern :可选,抛出异常的级别。

    • 9.删除文档:

      db.collection.remove(
        <query>,
        <justOne>
      )

      参数说明

      • query :(可选)删除的文档的条件。

      • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

      • writeConcern :(可选)抛出异常的级别。

    • 10.删除集合所有数据:db.collection.remove({})

    • 11.查询文档:db.collection.find(query, projection)

      参数说明

      • query :可选,使用查询操作符指定查询条件。

      • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

      PS:

      如果你需要以易读的方式来读取数据,可以使用 `pretty()` 方法,语法格式如下:
       ```json
       db.col.find().pretty()
       ```

      pretty() 方法以格式化的方式来显示所有文档。

    • 12.查询一个文档(匹配条件的第一个):db.collection.findOne()

    Node操作mongoDB

    • 方法一:

      使用 mongoDB 官方提供的 node mongodb drivermongoDB ,这种方法是官方提供的,感兴趣的同学可以去 npm 官网查找文档,这里推荐下面一种方法。

      mongoDB npm 文档

    • 方法二:

      使用 mongoose

      Mongoose 是在 node.js 环境下对 mongodb 进行便捷操作的对象模型工具。

      官方 api 文档

    下面说明下 mongoose 的具体用法。

    1. 安装 mongoose

      npm install mongoose

      安装完成后,打开mongodb。命令行敲入:mongod,即可打开 mongodb

    2. 利用mongoose连接mongodb

      新建一个js文件,引入mongoose,这里可以参照官网 写的一个 hello world

      const mongoose = require('mongoose')
      // 连接数据库
      mongoose.connect('mongodb://数据库地址(包括端口号)/数据库名称', (err, ret) => {
        if (err) {
          console.log('连接失败')
        } else {
          console.log('连接成功')
        }
      })

      这样,我们就可以连接上数据库了,注意:如果没有指定数据库名称,则默认连接 test 数据库。

    3. 创建 Schema ,设计文档结构

      Schema 到底是个什么东西呢,我们在往数据库插入数据之前是不是应该得稍微设计下文档的结构,也就是关系数据库中表的结构啥的,因为有一定的设计才使得数据的完整性,不会产生脏数据,Schema就是用来干这个事情的,我们看下官方的介绍:

      Schema 主要用于定义 MongoDB 中集合 Collection 里文档 document 的结构。mongoose 对表结构的定义,每个 Schema 会映射到mongodb中的一个 collectionSchema 不具备操作数据库的能力。

      定义Schema非常简单,指定字段名和类型即可,支持的类型包括以下8种:

       String      字符串
       Number      数字    
       Date        日期
       Buffer      二进制
       Boolean     布尔值
       Mixed       混合类型
       ObjectId    对象ID    
       Array       数组
      复制代码

      通过mongoose.Schema来调用Schema,然后使用new方法来创建schema

      // 引入Schema
      const Schema = mongoose.Schema
      // 通过 new 创建一个Schema
      const userSchema = new Schema({
        // 这里来设计文档的结构,后面插入集合的每一个文档必须是以下指定的结构
        name: {
          type: String,
          required: true //  规定 name 是必须有的字段
        },
        password: {
          type: String,
          required: true
        },
        email: {
          type: String
        }
      })

      通过以上的实例,我们就创建了一个 userSchema 的架构,规定了每个文档中必须有 namepassword 字段,且类型为 Stringemail 字段类型为 String,有或没有都可以。

    4. Schema 发布为 model (模型)

      简单说就是model是由 Schema 生成的模型,可以对数据库的操作。model的每一个实例(instance)就是一个文档。

      把 Schema 发布为模型只需调用mongoose的 mongoose.model() 方法即可,mongoose.model() 接收两个参数,第一个参数表示模型的名称,第二个参数是 Schema,返回值为模型构造函数。这里一定得把第一个参数设置成和 mongoose.model() 的返回值相同,否则会出错。最后得到的集合名称就为模型名称的小写形式,如果模型名称最后一个字符是字母,则变成复数形式,如果最后一个是数字,则不变,比如:模型名称:User,得到的集合名称为: users,模型名称为:User1, 得到的集合名称为;user1

      // 把Schema 发布为模型
      const User = mongoose.model('User', userSchema)
    5. 通过模型构造函数,可以对数据库进行一系列增删改查的操作。

      好了,我们经过以上的步骤,最后就可以通过 User 模型构造函数操作数据库了。

    mongoose增删改查mongoDB

    增加数据

    实例化一个模型构造函数就得到一个具体文档。

    const user = new User({
      // 传入具体的数据信息,必须和之前的Schema 配置的结构一致
      name: 'pubdreamcc',
      password: '123456',
      email: '333@pubdreamcc.com' // 可有可无
    })
    
    // 通过save()方法持久化存储数据
    
    user.save((err, ret) => {
      if (err) {
        console.log('保存失败')
      } else {
        console.log('保存成功')
        console.log(ret) // ret 就是刚新增加的文档
      }
    })
     

    ok, 通过上面两步我们就已经保存了一条数据到数据库中了,就是怎么简单。

    查询数据

    查询数据这里有好几个 API , 可以看下 mongoose 的官网:

    • find()
    • findById()
    • findOne()

    具体的用法和之前在控制台 操作mongoDB 数据类似,不清楚的同学可以查看本章第一节知识点: mongoDB数据库的使用

    这里选取一个findOne代表

    User.findOne({name: 'pubdreamcc'}, (err, ret) => {
      if (err) {
        console.log('查询失败')
      } else {
        console.log(ret) // ret 即为查询出来的那一条文档
      }
    })
     

    findOne() 会查找匹配的第一个文档出来,通常传入一个查找条件(对象),这里是从数据库查找 namepubdreamcc 的文档出来。

    删除数据

    删除数据同样也有好几个方法,这里参照官网 api :

    • remove()
    • findOneAndRemove()
    • findByIdAndRemove()

    用法其实和更新数据,包括前面说到的查找数据类似,remove() 会删除所有匹配的全部文档,findOneAndRemove() 会删除匹配的第一个文档,findByIdAndRemove() 通过唯一的id值删除某一个文档。

    这里选取findByIdAndRemove() 来说明,其他的小伙伴可以去 mongoose 官网 api 查询,我就不再反复说了,用法很简单,大家看一下都懂的。

    mongoose 官网 api: api document

    User.findByIdAndRemove('id值', (err, ret) => {
      if (err) {
        console.log('删除失败')
      } else {
        console.log('删除成功')
        console.log(ret) // ret 即为删除信息反馈对象,包括成功删了几条数据等
      }
    })
     

    更新数据

    更新数据也有几个 api 可以供我们使用,我就罗列下,然后也是选取一个加以说明,其他的小伙伴们可以去官网查看 api 即可。

    • findByIdAndUpdate()
    • update()
    • findOneAndUpdate()

    这里选取 update() 来演示下:

    User.update({name: 'pubdreamcc'}, {email: '111@pubdreamcc.com'}, (err, ret) => {
      if (err) {
        console.log('更新失败')
      } else {
        console.log('更新成功')
      }
    })

    update() 方法会把所有满足条件的数据都更新,上面我们已经把 name 为: pubdreamcc 的所有文档的email 都修改为 111@pubdreamcc.com

    总结

    本文也是我查阅了很多资料,包括相关教程得来,如果有的地方写的有差错,小伙伴们可以留言评论。

    好了,That's all. thank you!


    原作者:pubdreamcc,原链接:https://juejin.im/post/5cf09e7651882566477b76fb
    来源:掘金

  • 相关阅读:
    Chrome调试工具常用功能
    把读取sql的结果写入到excel文件
    Android逆向破解:Android Killer使用
    鸭子类型和猴子补丁
    Scrapy同时启动多个爬虫
    命令注入
    理解RESTful架构
    程序员需要谨记的九大安全编码规则
    10条建议分享:帮助你成为与硅谷工程师一样优秀的程序员
    代码审计:是安全专家都应该掌握的技能
  • 原文地址:https://www.cnblogs.com/GeniusZ/p/12153536.html
Copyright © 2020-2023  润新知