目录
- 概述
- 核心概念
- 下载与安装
- 版本问题
- 环境配置
- cmd运行
- 数据库与集合命令
- 数据库命令
- 集合命令
- 文档命令
- mongoose
- mongoose的使用
- 插入
- 字段类型
- mongoose字段验证与强制性设置
- 删除文档
- 更新文档
- 读取数据
- 条件控制
- 后记
概述
Mongodb是一个分布式文件存储的数据库。
官网:Mongodb官方网站
这是一个非常适用于前端工程师开发全栈的数据库,比较常见的一套技术栈:Vue+Node.js+Mongodb。值得学习了解。
核心概念
数据库(database):数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中也可也存放很多集合。
集合:类似于js中的数组,在JS中可以存放很多文档。
文档:是数据库中最小单位,类似于JS中的对象。
一般情况下,一个项目使用一个数据库,一个集合会存储同意类型的数据。
下载与安装
下载和安装高赞博客讲的很清楚,随便就可搜到,不赘述。
这里说一下下载和安装遇到的坑。
版本问题
建议下载5开头的版本。数据库启动后,有服务端和客户端。6以上的版本,运行客户端的语句mongo会出问题,需要下载一个MongoDB Shell。
安装后再运行也不一定能行,所以建议安装低版本的。
环境配置
环境配置这一步其实不需要太过着急,只是为了开机之后能顺利运行,其实手动打开也是一样。所以我觉得如果对这一块不熟练,要不就去搜一下教程,要不就不安这一步,需要用的时候直接运行就好啦。
cmd运行
一般情况下,终端运行成功,在以下地址会出现提示:
http://localhost:27017
这种就算是运行成功了。如果没运行成功,无法显示这个网页,要么就是前面的步骤失败,要么就是地址问题:要在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运行后:
上面集合的回调其实也可也用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'
}
])
最后效果:
字段类型
上面说到了文档结构,文档结构其实是表格中的字段。设置表格中的字段名与字段类型。
类型 | 描述 |
---|---|
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)
})
最后结果:
也可也批量删除,deleteMany。
BookModel.deleteMany(
{author: 'zxd'}
).then(err => {
console.log(err)
return;
}, data => {
console.log(data)
})
更新文档
也就是我们的修改操作。
更新一条数据:
// 更新数据
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入门内容。后面还会有相关博客的更新,欢迎关注!