一文入门Mongodb

目录

  • 概述
  • 核心概念
  • 下载与安装
    • 版本问题
    • 环境配置
    • cmd运行
  • 数据库与集合命令
    • 数据库命令
    • 集合命令
    • 文档命令
  • mongoose
    • mongoose的使用
    • 插入
    • 字段类型
    • mongoose字段验证与强制性设置
    • 删除文档
    • 更新文档
    • 读取数据
    • 条件控制
  • 后记

概述

Mongodb是一个分布式文件存储的数据库。

官网:Mongodb官方网站

这是一个非常适用于前端工程师开发全栈的数据库,比较常见的一套技术栈:Vue+Node.js+Mongodb。值得学习了解。

核心概念

数据库(database):数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中也可也存放很多集合。

集合:类似于js中的数组,在JS中可以存放很多文档。

文档:是数据库中最小单位,类似于JS中的对象。

一般情况下,一个项目使用一个数据库,一个集合会存储同意类型的数据。

下载与安装

下载和安装高赞博客讲的很清楚,随便就可搜到,不赘述。

这里说一下下载和安装遇到的坑。

版本问题

建议下载5开头的版本。数据库启动后,有服务端和客户端。6以上的版本,运行客户端的语句mongo会出问题,需要下载一个MongoDB Shell。

安装后再运行也不一定能行,所以建议安装低版本的。

环境配置

环境配置这一步其实不需要太过着急,只是为了开机之后能顺利运行,其实手动打开也是一样。所以我觉得如果对这一块不熟练,要不就去搜一下教程,要不就不安这一步,需要用的时候直接运行就好啦。

cmd运行

一般情况下,终端运行成功,在以下地址会出现提示:

http://localhost:27017

一文入门Mongodb_第1张图片
这种就算是运行成功了。如果没运行成功,无法显示这个网页,要么就是前面的步骤失败,要么就是地址问题:要在data/db下运行命令才有用,如果在bin中运行,也打不开网页。

数据库与集合命令

数据库命令

显示所有数据库:

show dbs

切换指定数据库,如果数据库不存在自动创建数据库:

use 数据库名

显示当前所在数据库:

db

删除当前数据库:

use 库名
db.dropDatabase()

集合命令

创建集合:

db.createCollection('集合名词')

显示当前数据库中所有集合:

show collections

删除某个集合:

db.集合名.drop()

重命名集合:

db.集合名.renameCollection('newName')

文档命令

增、删、改、查。

插入信息(对象形式):

db.集合名.insert(文档对象)

查询文档(没有查询条件就是查询全部,传进去的也是个对象):

db.集合名.find(查询条件)

更新数据(新对象代替旧对象):

db.集合名.update({条件}, {新文档内容})

修改数据:

db.集合名.update({条件}, {$set: {更改内容}}

删除文档

db.集合名.remove(查询条件)

mongoose

Mongoose是一个对象文档模型库,作用是方便使用代码操作mongodb数据库。

官网:Mongoose官网

mongoose的使用

首先是安装:

npm i mongoose

安装后就可以在项目中使用了。在项目中同构mongoose用js语言就可以实现对数据库的操作,非常方便。

接下来是一些基本的操作代码:

//安装mongoose
//导入mongoose
const mongoose = require('mongoose')

//连接mongodb服务
mongoose.connect('mongodb://127.0.0.1:27017/test');

//设置回调
mongoose.connection.once('open', () => {
    console.log('连接成功')
});//设置连接成功的回调
mongoose.connection.once('error', () => {
    console.log('连接失败')
});//设置连接失败的回调 
mongoose.connection.once('close', () => {
    console.log('连接关闭')
})

//关闭mongodb的连接
setTimeout(() => {
    mongoose.disconnect();
}, 2000)

用node运行后:
一文入门Mongodb_第2张图片
上面集合的回调其实也可也用on去绑定。但是on和once是有区别的。这里来说一个情况,假如一个网站,请求了数据,但是网突然断掉了。调整好之后,如果用on,就会重新执行后面绑定过的那些函数,如果是once的话,因为之前执行过一次,就不会再次执行了。

插入

在刚刚的代码基础上进行插入,插入要写在连接成功下面的内容中。

这里以代码为例来讲解:

// 导入
const mongoose = require('mongoose');

// 连接服务
mongoose.connect('mongodb://127.0.0.1:27017/test');

// 设置回调
mongoose.connection.once('open', () => {
    console.log('连接成功')

    // 创建文档结构对象
    // 设置集合中文档的属性以及属性值的类型
    let StuSchema = new mongoose.Schema({
        name: String,
        age: Number
    })

    // 创建模型对象
    // 对文档操作的封装对象
    let StuModel = mongoose.model('Students', StuSchema);
    // 新增
    StuModel.create({
        name: 'ls',
        age: 34
    }).then(err => {
        console.log(err)
    }, data => {
        console.log(data)
        mongoose.disconnect()
    })
})

先创建一个结构对象。结构对象,可以理解成表格中的字段,其实就是设置表格的字段;
创建模型对象,说白了就是填充表格。

我之前接触的低代码开发平台,不清楚底层,但是可以大胆猜测,用的就是这种非关系型数据库。也是先建立模型,再去创建模型对象,把模型和模型对象进行关联。

上面代码中需要注意的是,新增的create返回的实际上是一个promise对象,我们需要用promise的写法来处理结果。

另外还可以一次性插入多条文档:用insertmany,内部是一个数组:

    BookModel.insertMany([{
        name: 'zxdds1',
        author: 'zxd'
    }, {
        name: 'zxdds2',
        author: 'zxd'
    }, {
        name: 'zxdds3',
        author: 'zxd'
    }, {
        name: 'zxdds4',
        author: 'zxd'
    }, {
        name: 'zxdds5',
        author: 'zxd'
    }
    ])

最后效果:
一文入门Mongodb_第3张图片

字段类型

上面说到了文档结构,文档结构其实是表格中的字段。设置表格中的字段名与字段类型。

类型 描述
String 字符串
Number 数字
Boolean 布尔值
Array 数组,也可也用[]来标识
Date 日期
Buffer Buffer对象
Mixed 任意类型,需要使用mongoose.Schema.Types.Mixed指定
Objectld 对象ID,需要使用mongoose.Schema.Types.ObjectId指定
Decimal128 高精度数字,需要使用mongoose.Schema.Types.Decimal128指定

mongoose字段验证与强制性设置

对文档字段值进行验证。

验证的方式很简单,类似于前端的数据处理。这里请看一段代码:

const mongoose = require('mongoose')

mongoose.connect('mongodb://127.0.0.1:27017/test');

mongoose.connection.once('open', () => {
    console.log('OK');

    //创建集合信息
    let BookSchema = new mongoose.Schema({
        name: {
            type: String,
            required: true//该属性必须不为空
        },
        author: String
    })
    let BookModel = mongoose.model('BookSchema', BookSchema)
    //在数据库的集合中添加数据
    BookModel.create({
        name: 'zxdds',
        author: 'zxd'
    }).then(err => {
        console.log(err)
    }, data => {
        console.log(data)
        mongoose.disconnect()
    })
})

在这段代码中,就对name进行了处理,规定了数据的类型为String,并且要求一定要存在。

另外,还有一些其他设置:

require: true  必填项
default: '' 匿名项
enum: ['', ''] 枚举类型,设置的数据必须是数组类型
unique: true 唯一值

删除文档

可以根据条件来删除对应数据:

    BookModel.deleteOne(
        {_id: '648fbba34da32e4dbed0d6a5'}
    ).then(err => {
        console.log(err)
        return;
    }, data => {
        console.log(data)
    })

最后结果:
一文入门Mongodb_第4张图片
也可也批量删除,deleteMany。

    BookModel.deleteMany(
        {author: 'zxd'}
    ).then(err => {
        console.log(err)
        return;
    }, data => {
        console.log(data)
    })

一文入门Mongodb_第5张图片

更新文档

也就是我们的修改操作。

更新一条数据:

    // 更新数据
    BookModel.updateOne(
        {name: 'zxdds5'},
        {name: 'wxy'}).then(err => {
            console.log(err)
        }, data => {
            console.log(data)
        })

批量更新:

    // 批量更新
    BookModel.updateMany(
        {author: 'zxd'},
        {author: 'zxdd'}).then(err => {
            console.log(err)
        }, data => {
            console.log(data)
        })

读取数据

读取单条:

    BookModel.findOne({name: 'zxdds1'}).then(err => {
        console.log(err)
    }, data => {
        console.log(data)
    })

批量读取:

    BookModel.find({author: 'zxdd'}).then(err => {
        console.log(err)
    }, data => {
        console.log(data)
    })

读取所有:

    BookModel.find().then(err => {
        console.log(err)
    }, data => {
        console.log(data)
    })

条件控制

如何设置查询文档的条件
比大小:

//找价格小于20的图书
BookModel.find({price: {$lt: 20}}).then...

大于就是gt。

逻辑或:

//曹雪芹或者余华的书
BookModel.find({$or: [{author: 'cxq'}, {author: 'yh'}]).then...

逻辑与:

BookModel.find($and: [{price: {$gt: 300}}, {author: 'yh'}]).then...

后记

以上就是Mongodb入门内容。后面还会有相关博客的更新,欢迎关注!

你可能感兴趣的:(Nodejs,mongodb,数据库)