数据库概念及环境搭建
为什么要使用数据库
- 动态网站中的数据都是存储在数据库中
- 数据库可以用来持久存储客户端通过表单收集的用户信息
- 数据库本身可以持久对数据进行高效的管理
什么是数据库
数据库即存储数据的仓库,可以将数据进行有序的分门别类的存储。它是独立于语言之外的软件,可以通过API去操作它。常见的数据库软件有:Mysql,mongoDB,oracle
MongoDB可视化软件
MongoDB可视化操作软件,是使用图形界面操作数据库的一种方式。
数据库相关概念
在一个数据库软件中可以包含多个数据库仓库,在每个数据库仓库中可以包含多个数据集合,每个数据集合中可以包含多条文档(具体的数据)
Mongoose第三方包
- 使用Node.js操作MongoDB数据库需要依赖Node.js第三方包mongoose
- 使用npm install mongoose命令下载
启动MongoDB
在命令行中运行net start mongoDB即可启动mongoDB,否则MongoDB将无法连接
注意:命令行需要被赋予管理员权限才可以执行net start/stop mongodb指令,否则拒绝访问
数据库连接
使用mongoose第三方模块提供的connect方法即可连接数据库
//引用mongoose第三方模块
const mongoose = require("mongoose");
//使用mongoose模块的connect方法连接mongoDB数据库
mongoose.connect("mongodb://localhost/qzxbg",{
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(()=>{
console.log("数据库连接成功")
})
.catch(error=>{
console.log("数据库连接失败"+error);
})
创建数据库
在mongoDB中不需要显示创建数据库,如果正在使用的数据库不存在,MongoDB会自动创建
创建集合
创建集合分为两步,一是对集合设定规则,二是创建集合,创建mongoose.Schema构造函数的实例即可创建集合。
//使用mongoose模块的mongoose.Schema方法来创建集合规则
const courseInfo = new mongoose.Schema({
name:String,
author:String,
isPublished:Boolean
})
//使用mongoose.model方法来创建集合
//两个参数:1.集合的名字也就是表名 2.集合的规则也就是表中各个字段的约束条件
const course = mongoose.model("Course",courseInfo);
创建文档
创建文档实际上就是向集合中插入数据。分为两步
(1)创建集合的实例
(2)调用实例对象下的save方法将数据保存到数据库中。
创建文档的方式:
(1)通过集合实例传参
//使用mongoose模块的mongoose.Schema方法来创建集合规则
const courseInfo = new mongoose.Schema({
name:String,
author:String,
isPublished:Boolean
})
//使用mongoose.model方法来创建集合,返回值为集合构造方法
const course = mongoose.model("Course",courseInfo);
//创建集合实例
const courser = new course({
name:'node.js入门',
author:"qzxbg",
isPublished:true
});
//将文档插入到数据库当中
courser.save();
(2)调用集合构造函数的create方法,create方法返回promise对象
//调用集合的构造方法下面的create方法来创建文档
//create方法接收两个参数
//1.集合规则对应的数据
//2.回调函数,回调函数也接受两个参数:
//(1)错误对象,如果插入成功则err的值为null
//(2)插入的文档
course.create({
name:"mongoDB入门",
author:"qzxbg",
isPublished:true
},(err,doc)=>{
if(err == null){
console.log(doc);
}else{
console.log("插入文档失败");
}
})
//create方法返回的是一个promise对象
course.create({
name:"mongoDB入门",
author:"qzxbg",
isPublished:true
}).then(result=>{
console.log(result);
}).catch(error=>{
console.log(error);
})
MongoDB数据库导入数据
mongoimport -d 数据库名称 -c 集合名称 --file数据文件
需要提前配置系统变量,才能执行该指令
查询文档
- 使用集合构造函数的find方法进行查询,如果没有指明条件,则返回一个数组,里面包含该集合的所有文档,如果指明了查询条件,则返会一个数组,里面包含了该集合中对应查询条件的文档
//查看用户集合中的所有文档
user.find()
.then(result=>{
console.log(result);
})
.catch(error=>{
console.log(error);
})
//查看具体集合的文档
user.find({
name:"小明"
})
.then(result=>{
console.log("小明的数据:"+result);
})
.catch(error=>{
console.log("该数据不存在");
})
- 使用集合构造函数的findOne()方法查询,返回一条数据,其他和find方法一样。
//使用集合构造函数的findOne方法进行查询
user.findOne()
.then(result=>{
console.log("findOne:"+result)
})
.catch(error=>{
console.log("查询失败");
})
user.findOne({
age:17})
.then(result=>{
console.log("age"+result);
})
.catch(error=>{
console.log("查询失败")
});
- 匹配使用$gt,$lt来匹配大于,小于条件
user.find({
age:{
$gt:17}})
.then(result=>{
console.log("age"+result);
})
.catch(error=>{
console.log("查询失败")
});
user.find({
age:{
$lt:18}})
.then(result=>{
console.log("$lt"+result)
})
.catch(error=>{
console.log(error);
})
- 使用$in来匹配包含关系
//使用$in来匹配包含关系
user.find({
name:{
$in:["小明"]}})
.then(result=>{
console.log("$in:"+result);