您的位置:首页 > 数据库 > Mongodb

mongoDB看这篇就够了

2019-05-31 14:27 1486 查看

写在前面

hello,小伙伴们,我是

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

node学习教程GitHub

安装
mongoDB

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

mongoDB download地址: download

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

ok
了。

初体验

  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
中有三个基本核心的概念:

  • 文档

  • 集合

  • 数据库

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

文档
: 文档是一个键值(
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 driver
    mongoDB
    ,这种方法是官方提供的,感兴趣的同学可以去 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中的一个
collection
Schema
不具备操作数据库的能力。

定义

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
的架构,规定了每个文档中必须有
name
password
字段,且类型为
String
email
字段类型为
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()
会查找匹配的第一个文档出来,通常传入一个查找条件(对象),这里是从数据库查找
name
pubdreamcc
的文档出来。

删除数据

删除数据同样也有好几个方法,这里参照官网 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 !

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: