mongoDB看这篇就够了

写在前面

hello,小伙伴们,我是 pubdreamcc ,本篇文章依旧出至于个人 GitHub仓库 node学习教程 ,若是你以为我写的还不错,欢迎给个 star ,小伙伴们的 star 是我持续更新的动力 !javascript

node学习教程GitHubhtml

安装 mongoDB

安装这里,我就不详细介绍,你们能够根据官网选择匹配本身电脑系统的版本安装便可。java

mongoDB download地址: downloadnode

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

初体验

  1. 配置环境变量

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

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

在任意盘符根目录下建立一个 data 目录,用来存放数据库文件。 mongoDB 会自动把本身安装位置的盘符根目录下的 data 文件夹做为本身的数据存储目录,这里也能够直接在安装位置所在盘符建立。sql

  1. 启动 mongoDB 数据库

若是 data 目录建立在安装位置的盘符根目录下,直接
打开命令行,敲入:mongodb

mongod

若是是其余位置,则须要指定数据存放的位置:shell

mongod --dbpath 文件路径

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

  1. 链接数据库

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

MongoDB 概念解析

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

  • 文档

  • 集合

  • 数据库

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

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

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

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

好比,咱们能够将如下不一样数据结构的文档插入到集合中:

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

数据库(dataBase)

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

下面给出一张图用来表示 mongoDB 中的一些概念同 SQL 概念 的 对比,辅助理解。

mongoDB基本操做

在刚才咱们链接上本地数据库以后,在这个命令行,咱们能够进行不少 mongoDB 提供的增删改查等的基本操做,且听我一一道来。

  1. 建立数据库 : use 数据库名称

若是数据库不存在,则建立数据库,不然切换到指定数据库。

MongoDB 中默认的数据库为 test,若是你没有建立新的数据库,集合将存放在 test 数据库中。

  1. 查看全部数据库: show dbs

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

  3. 建立集合: db.createCollection(集合名称)

  4. 查看已有集合: show collections

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

若是成功删除选定集合,则 drop() 方法返回 true,不然返回 false

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

  2. 更新文档: 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 :可选,抛出异常的级别。

  1. 删除文档:
db.collection.remove(
  <query>,
  <justOne>
)

参数说明

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

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

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

  1. 删除集合全部数据:db.collection.remove({})

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

参数说明

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

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

PS:

若是你须要以易读的方式来读取数据,可使用 pretty() 方法,语法格式以下:

db.col.find().pretty()

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

  1. 查询一个文档(匹配条件的第一个):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

  1. 利用mongoose链接mongodb

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

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

这样,咱们就能够链接上数据库了,注意:若是没有指定数据库名称,则默认链接 test 数据库。

  1. 建立 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,有或没有均可以。

  1. 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)
  1. 经过模型构造函数,能够对数据库进行一系列增删改查的操做。

好了,咱们通过以上的步骤,最后就能够经过 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

总结

本文也是我查阅相关资料,看了不少mongoDB的资料总结而来,若是有那些地方有差错,欢迎留言评论。

须要演示的源代码能够去GitHub仓库查看。

ok,that's all , thank you !

相关文章
相关标签/搜索