一、介绍
数据库介绍
网站中所使用的数据错综复杂,各种数据之间又互相勾连,例如电商网站的商品分类、推荐商品、猜你喜欢商品、商品详情、购物车数据等等。为了方便管理,会将网站中所使用的所有数据集中在一起进行管理,方便对数据进行各种条件下的查询,实现性能的优化。
存储数据,可以选择使用文件存储,但文件的读写效率偏低,随着科技发展,到目前为止,大家公认的效率和性能较高的存储系统,就是数据库了。
数据库的数据也是存储在磁盘中的,只是有其独有的存储规律和管理办法,从计算机较角度来看,其实就是一个专业管理磁盘中数据的软件。
数据库分类
关系型数据库:代表数据库:Mysql、SqlServer、Oracle...
非关系型数据库:代表数据库:MongoDB、Redis...
mongdb介绍
Mongodb是非关系数据库中的一种,采取json格式对数据进行管理,对js是非常友好的。
体系介绍:mongodb由多个"库"组成,每个库由多个"集合"或"表"组成,每个集合由多个"文档"或"数据"组成。
二、命令行操作
基本操作:
//启动操作
mongo
//退出mongoDB
exit
//查看所有的数据库列表
show dbs
//创建数据库或切换数据库
use 数据库名
//查看库中所有表
show tables
show collections
//数据库中的表不需要创建,只要添加数据就能将表自动创建好。
db.表名/集合名.insert(JSON格式数据)
//删除表
db.表名/集合名.drop()
//删除的是当前的库
db.dropDatabase()
数据操作
_id是由系统自动生成,代表这个数据的唯一标识,类似于人的身份证,确保数据的唯一性,永远不会重复
增
// 添加文档数据
db.表名/集合名.insertMany([{}, {}, {}])
删
//删除集合中已存在的文档数据
db.表名.deleteOne({条件})
改
//根据指定条件,将数据中的某一部分修改为指定的新数据
db.表名.updateOne({条件}, {$set: {新的数据}})
//让指定条件的数据中的某个数字自增或自减
db.表名.updateOne({条件}, {$inc: {键: 自增多少的数字}})
查
//查询所有的数据,获取全部数据
db.表名/集合名.find();
//带条件的查询
db.表名/集合名.find({条件})
//并且的条件:{条件, 条件}
//或者的条件:{$or: [{条件}, {条件}]}
//某个键 等于 某个值 {键: 值}
//某个键 大于 某个值 {键: {$gt: 值}}
//某个键 大于等于 某个值 {键: {$gte: 值}}
//某个键 小于 某个值 {键: {$lt: 值}}
//某个键 小于等于 某个值 {键: {$lte: 值}}
//某个键 不等于 某个值 {键: {$ne: 值}}
//某个键 在 某个数组中 {键: {$in: [值, 值]}}
//以正则表达式作为条件查询 {键: 正则表达式}
//空条件表示查询所有 {}
//在查询结果中,希望某些键值对不显示或强制显示;0表示这个键不显示,1表示这个键要强制显示
db.表名.find(条件, {键: 0/1})
//统计查询结果的数据的数量
db.表名.find(条件).count()
//统计所有数据的数据量
db.表名.count()
//排序;1表示升序,-1表示降序
db.表名.find(条件).sort({键: 1/-1})
//数据很多,但是要分页显示,根据当前是第几页来查询需要的数据
db.表名.find().skip(数字).limit(数字);
//skip中的数据,表示跳过前面多少条数据,开始查询
//limit中的数据,表示要查询多少 条数据
三、可视化操作
mongodb的管理软件有很多,例如:compass、robot...
官方推荐使用compass,所以compass下载成功后,只需要双击安装即可,不需要做其他操作,会自动安装。安装完成后会自动启动,这个软件是用来管理数据库的,并不能代表数据库,所以这个软件首先需要连接mongodb连接成功后,就可以看到数据库中所有的库了
四、代码操作
操作步骤
在代码中操作mongodb,需要依赖第三方模块mongoose,仅限于nodejs环境中使用。
//下载安装:npm i mongoose
//导入模块
const mongoose = require('mongoose')
//连接数据库
mongoose.connect('mongodb://localhost:27017/数据库名')
//创建schema
//由于mongodb属于非关系型数据库,对数据的类型和表头没有约束,但在实际引用中,一个表中的数据类型和表头都是相同的,所以mongoose内部封装了schema,用于设置和约束数据的类型和表头。
const UserSchema = new mongoose.Schema({
// 字段名/域名称
name: {
// 指字域类型
type: String,
// 必填字段
required: true,
// 字段最小长度 minlength 用于字符串类型
minlength: 2,
},
age: {
type: Number,
// 默认值
default: 10,
// 字段最小值 min用于数字类型
min: 1,
},
password: String,
email: String,
// 定义此字段为 字符串数组类型
hobbies: [String],
});
//对表头数据的约数规则参考:http://www.mongoosejs.net/docs/guide.html
//创建model,对数据的操作都是通过model进行的
//参数1:模型名称,如果没有参数3,会将模型名的复数表示作为表的名称
//参数2:给当前表创建好的schema
//参数3:表名,可选
const Model = mongoose.model('User', UserSchema, 'users')
增
model.insertMany({key:value}, (err, docs) => {
err为错误信息
docs为插入的结果信息,是一个数组
})
删
model.deleteOne({条件}, (err, docs) => {
err为错误信息
docs为删除的结果信息
})
改
model.updateOne({条件},{$set:{key:value}}, (err, docs) => {
err为错误信息
docs为修改的结果信息
})
查
model.find({条件},{可选字段返回:0/1},{skip:0,limit:10}, (err, docs) => {
err为错误信息
docs为查询的结果信息 - 返回数组
})
Model.findOne({条件},{可选字段返回:0/1}, (err, docs) => {
err为错误信息
docs为查询的结果信息 - 返回对象
})