学习笔记——mongoDB"/>
Node.js学习笔记——mongoDB
一、简介
1.1.Mongodb是什么
Mongodb是一个基于分布式文件存储的数据库,官方地址:
/
1.2.数据库是什么
数据库是按照数据结构来组织、存储和管理数据 的应用程序。
1.3.数据库的作用
数据库的主要作用就是管理数据,对数据进行增删改查。
1.4.数据库管理数据的特点
相比于纯文件管理数据,数据库管理数据有如下特点:
- 速度更快
- 扩展性更强
- 安全性更强
1.5.为什么选择Mongodb
操作语法与javascript类似,容易上手,学习成本低。
二、核心概念
Mongodb中有三个重要概念需要掌握
- 数据库:数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存放很多集合
- 集合:集合类似于JS中的数组,在集合中可以存放很多文档
- 文档:文档是数据库中的最小单位,类似于JS中的对象。
JSON文件实例:
{"accounts": [{"id": "3-YLju5f3","title": "买电脑","time": "2023-02-08","type": "-1","account": "5500","remarks": "为了上网课"},{"id": "3-YLju5f4","title": "请女朋友吃饭","time": "2023-02-08","type": "-1","account": "214","remarks": "情人节聚餐"},{"id": "mRQiD4s3K","title": "发工资","time": "2023-02-19","type": "1","account": "4396","remarks": "终于发工资啦!~~"}],"users": [{"id": 1,"name": "zhangsan","age": 18},{"id": 2,"name": "lisi","age": 20},{"id": 3,"name": "wangwu","age": 22}]
}
大家可以通过JSON文件来理解Mongodb中的概念:
- 一个JSON文件好比是一个数据库,一个Mongodb服务下也可由N个数据库
- JSON文件中的一级属性的数组值好比是集合
- 数组中的对象好比是文档
- 对象中的属性有时候也称为字段
一般情况下
一个项目使用一个数据库
一个集合会存储同一种类型的数据
三、下载与启动
下载地址:
建议选择 zip 类型, 通用性更强
配置步骤如下:
1> 将压缩包移动到 C:\Program Files 下,然后解压
2> 创建 C:\data\db 目录,mongodb 会将数据默认保存在这个文件夹
3> 以 mongodb 中 bin 目录作为工作目录,启动命令行
4> 运行命令 mongod
看到最后的 waiting for connections 则表明服务 已经启动成功
然后可以使用 mongo 命令连接本机的 mongodb 服务
注意:
- 为了方便后续方便使用 mongod 命令,可以将 bin 目录配置到环境变量 Path 中
- 千万不要选中服务端窗口的内容 ,选中会停止服务,可以 敲回车 取消选中
四、命令行交互
命令行交互一般是学习数据库的第一步,不过这些命令在后序用的比较少,所以大家了解即可。
4.1.数据库命令
- 显示所有的数据库
show dbs
- 切换到指定的数据库,如果数据库不存在会自动创建数据库
use 数据库名
- 显示当前所在的数据库
db
- 删除当前数据库
use 库名
db.dropDatabase()
4.2.集合命令
- 创建集合
db.createCollection('集合名称')
- 显示当前数据库中的所有集合
show collections
- 删除某个集合
db.集合名.drop()
- 重命名集合
db.集合名.renameCollection('newName')
4.3.文档命令
- 插入文档
db.集合名.insert(文档对象);
- 查询文档
db.集合名.find(查询条件)
_id 是 mongodb 自动生成的唯一编号,用来唯一标识文档
- 更新文档
db.集合名.update(查询条件,新的文档)
db.集合名.update({name:'张三'},{$set:{age:19}})
- 删除文档
db.集合名.remove(查询条件)
4.4.应用场景
4.4.1 新增
- 用户注册
- 发布视频
- 发布商品
- 发朋友圈
- 发评论
- 发微博
- 发弹幕
- …
4.4.2 删除
- 删除评论
- 删除商品
- 删除文章
- 删除视频
- 删除微博
- …
4.4.3 更新
- 更新个人信息
- 修改商品价格
- 修改文章内容
- …
4.4.4 查询
- 商品列表
- 视频列表
- 朋友圈列表
- 微博列表
- 搜索功能
- …
五、Mongoose
5.1 介绍
Mongoose 是一个对象文档模型库,官网 /
5.2 作用
方便使用代码操作 mongodb 数据库
5.3 使用流程
//2. 导入 mongoose
const mongoose = require('mongoose');
//3. 连接数据库
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');
//4. 设置连接回调
//连接成功
mongoose.connection.on('open', () => {console.log('连接成功');//5. 创建文档结构对象let BookSchema = new mongoose.Schema({title: String,author: String,price: Number});//6. 创建文档模型对象let BookModel = mongoose.model('book', BookSchema);//7. 插入文档BookModel.create({title: '西游记',author: '吴承恩',price: 19.9}, (err, data) => {if (err) throw err;//输出 data 对象console.log(data);//8. 断开连接mongoose.disconnect();});
});
//连接出错
mongoose.connection.on('error', () => {console.log('连接出错~~');
})
//连接关闭
mongoose.connection.on('close', () => {console.log('连接关闭');
})
5.4 字段类型
5.5 字段值验证
Mongoose有一些内建验证器,可以对字段值进行验证
必填项
title: {
type: String,
required: true // 设置必填项
},
** 默认值**
author: {
type: String,
default: '匿名' //默认值
},
枚举值
gender: {
type: String,
enum: ['男','女'] //设置的值必须是数组中的
},
唯一值
username: {
type: String,
unique: true
}
unique 需要 重建集合 才能有效果 永远不要相信用户的输入
5.6 CURD
数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查(read)
增加
SongModel.create({title: '给我一首歌的时间',author: 'Jay'
}, function (err, data) {//错误console.log(err);//插入后的数据对象console.log(data);
});
批量插入
//1.引入mongoose
const mongoose = require('mongoose');
//2.链接mongodb数据库 connect 连接
mongoose.connect('mongodb://127.0.0.1:27017/project');
//3.设置连接的回调
mongoose.connection.on('open', () => {//4.声明文档结构const PhoneSchema = new mongoose.Schema({brand: String,color: String,price: Number,tags: Array})//6.创建模型对象const PhoneModel = mongoose.model('phone', PhoneSchema);PhoneModel.insertMany([{brand: '华为',color: '灰色',price: 2399,tags: ['电量大', '屏幕大', '信号好']},{brand: '小米',color: '白色',price: 2099,tags: ['电量大', '屏幕大', '信号好']}], (err, data) => {if (err) throw err;console.log('写入成功');mongoose.connection.close();})
})
删除
删除一条数据
SongModel.deleteOne({ _id: '5dd65f32be6401035cb5b1ed' }, function (err) {if (err) throw err;console.log('删除成功');mongoose.connection.close();
});
批量删除
SongModel.deleteMany({ author: 'Jay' }, function (err) {if (err) throw err;console.log('删除成功');mongoose.connection.close();
});
更新
更新一条数据
SongModel.updateOne({ author: 'JJ Lin' }, { author: '林俊杰' }, function (err) {if (err) throw err;mongoose.connection.close();
});
批量更新数据
SongModel.updateMany({ author: 'Leehom Wang' }, { author: '王力宏' }, function (err) {if (err) throw err;mongoose.connection.close();
});
查询
查询一条数据
SongModel.findOne({ author: '王力宏' }, function (err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});
//根据 id 查询数据
SongModel.findById('5dd662b5381fc316b44ce167', function (err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});
批量查询数据
//不加条件查询
SongModel.find(function (err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});
//加条件查询
SongModel.find({ author: '王力宏' }, function (err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});
5.7 条件控制
运算符
在 mongodb 不能 > < >= <= !== 等运算符,需要使用替代符号
db.students.find({id:{$gt:3}}); id号比3大的所有的记录
逻辑运算
$or 逻辑或的情况
db.students.find({$or:[{age:18},{age:24}]});
$and 逻辑与的情况
db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});
正则匹配
条件中可以直接使用 JS 的正则语法,通过正则可以进行模糊查询
db.students.find({name:/imissyou/});
5.8 个性化读取
字段筛选
//0:不要的字段
//1:要的字段
SongModel.find().select({ _id: 0, title: 1 }).exec(function (err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});
数据排序
//sort 排序
//1:升序
//-1:倒序
SongModel.find().sort({ hot: 1 }).exec(function (err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});
数据截取
//skip 跳过 limit 限定
SongModel.find().skip(10).limit(10).exec(function (err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});
六、图形化管理工具
我们可以使用图形化的管理工具来对 Mongodb 进行交互,这里演示两个图形化工具
Robo 3T 免费
Navicat 收费 /
更多推荐
Node.js学习笔记——mongoDB
发布评论