MongoDB
关系型和非关系型数据库
关系型数据库(表就是关系,或者说表与表之间存在关系)。
- 所有的关系型数据库都需要通过
sql
语言来操作 - 所有的关系型数据库在操作之前都需要设计表结构
- 而且数据表还支持约束
- 唯一的
- 主键
- 默认值
- 非空
非关系型数据库
- 非关系型数据库非常的灵活
- 有的关系型数据库就是key-value对儿
- 但MongDB是长得最像关系型数据库的非关系型数据库
- 数据库 -》 数据库
- 数据表 -》 集合(数组)
- 表记录 -》文档对象
一个数据库中可以有多个数据库,一个数据库中可以有多个集合(数组),一个集合中可以有多个文档(表记录)
{
qq:{
user:[
{
},{
},{
}...
]
}
}
- 也就是说你可以任意的往里面存数据,没有结构性这么一说
安装
-
下载
- 下载地址:https://www.mongodb.com/download-center/community
- 下载地址:https://www.mongodb.com/download-center/community
-
安装
一直Next即可。。。
这是安装MongoDB的服务。这是4之后的版本有的,这里安装了以后,就不用配置dbpath和logpath,也不用配置服务了。安装完了,就直接可以使用MongoDB。
npm i mongoose
- 配置环境变量
- 找到安装好的MongoDB文件夹下的bin目录
- 最后输入
mongod --version
测试是否安装成功
启动和关闭数据库
启动:
# mongodb 默认使用执行mongod 命令所处盼复根目录下的/data/db作为自己的数据存储目录
# 所以在第一次执行该命令之前先自己手动新建一个 /data/db
mongod
如果想要修改默认的数据存储目录,可以:
mongod --dbpath = 数据存储目录路径
注意:mongodb 4版本以上,不需要再手动区启动服务,默认已经自动启动了
停止:
在开启服务的控制台,直接Ctrl+C;
或者直接关闭开启服务的控制台。
连接数据库
连接:
# 该命令默认连接本机的 MongoDB 服务
mongo
退出:
# 在连接状态输入 exit 退出连接
exit
基本命令
-
show dbs
- 查看数据库列表(数据库中的所有数据库)
-
db
- 查看当前连接的数据库
- 查看当前连接的数据库
-
use 数据库名称
- 切换到指定的数据库,(如果没有会新建)
- 切换到指定的数据库,(如果没有会新建)
-
show collections
- 查看当前目录下的所有数据表
- 查看当前目录下的所有数据表
-
db.表名.find()
- 查看表中的详细信息
- 查看表中的详细信息
二、在Node中如何操作MongoDB数据库
使用官方的MongoDB
包来操作
http://mongodb.github.io/node-mongodb-native/
https://www.npmjs.com/package/mongodb
使用第三方包mongoose
来操作MongoDB数据库(推荐)
第三方包:mongoose
基于MongoDB官方的mongodb
包再一次做了封装,名字叫mongoose
,是WordPress项目团队开发的。
https://mongoosejs.com/
mongoose的第一个demo
新建一个项目文件夹:mongoose-demo,然后cmd 执行 npm init -y
:
执行npm install mongoose
:
demo1.js:
// 1. 引入包
const mongoose = require('mongoose');
// 2. 连接MongoDB 数据库
mongoose.connect('mongodb://localhost:27017/test', {
useNewUrlParser: true,
useUnifiedTopology: true
});
// 3. 创建一个模型
// 就是在设计数据库
// MongoDB是动态的,非常灵活,只需要在代码中设计你的数据库就可以了
// mongoose 这个包就可以让你的设计编写过程变得非常的简单
const Cat = mongoose.model('Cat', {
name: String
});
// 4. 实例化一个Cat
const kitty = new Cat({
name: 'Zildjian'
});
// 5. 持久化保存kitty实例
kitty.save().then(() => console.log('meow'));
mongoose:
官网:http:/mongoosejs.com/
官方指南:http:/mongoosejs.com/docs/guide.html
官方API文档:http:/mongooseis.com/docs/api.html
mongoose基本使用:
1. 设计Schema发布Model:
// 1.导包
const mongoose = require('mongoose')
const Schema = mongoose.Schema
// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')
// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({
username: {
type: String,
require: true // 必须有该属性
},
password: {
type: String,
require: true
},
email: {
type: String
}
});
// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
// mongoose会自动将大写名词的字符串生成小写复数的集合名称
// 例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User',userSchema)
// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
2. 增加数据
// 1.导包
const mongoose = require('mongoose')
const Schema = mongoose.Schema
// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')
// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({
username: {
type: String,
require: true // 必须有该属性
},
password: {
type: String,
require: true
},
email: {
type: String
}
});
// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
// mongoose会自动将大写名词的字符串生成小写复数的集合名称
// 例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User',userSchema)
// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
var admin = new User({
username: 'admin',
password: '123456',
email: '[email protected]'
})
admin.save(function(err, ret) {
if(err) {
console.log('保存失败')
} else {
console.log('保存成功!')
console.log(ret)
}
})
3. 查询数据
// 1.导包
const mongoose = require('mongoose')
const Schema = mongoose.Schema
// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')
// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({
username: {
type: String,
require: true // 必须有该属性
},
password: {
type: String,
require: true
},
email: {
type: String
}
});
// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
// mongoose会自动将大写名词的字符串生成小写复数的集合名称
// 例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User', userSchema)
// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
// 新增数据操作
/* var admin = new User({
username: 'zepzep',
password: '000000',
email: '[email protected]'
})
admin.save(function(err, ret) {
if(err) {
console.log('保存失败')
} else {
console.log('保存成功!')
console.log(ret)
}
}) */
// 查询数据操作
// 1.查询所有数据
/* User.find(function(err, ret) {
if(err) {
console.log('查询失败')
} else {
console.log(ret)
}
}) */
// 2.按条件查询数据,返回值为数组
/* User.find({
username: 'zepzep'
}, function(err, ret) {
if (err) {
console.log('查询失败')
} else {
console.log(ret)
}
})
*/
// 3.按条件查询数据,返回值为查找到的匹配的第一个的对象
User.findOne({
username: 'zepzep',
password: '111'
}, function(err, ret) {
if (err) {
console.log('查询失败')
} else {
console.log(ret)
}
})
4. 删除数据
// 1.导包
const mongoose = require('mongoose')
const Schema = mongoose.Schema
// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')
// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({
username: {
type: String,
require: true // 必须有该属性
},
password: {
type: String,
require: true
},
email: {
type: String
}
});
// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
// mongoose会自动将大写名词的字符串生成小写复数的集合名称
// 例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User', userSchema)
// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
// 新增数据操作
/* var admin = new User({
username: 'zepzep',
password: '000000',
email: '[email protected]'
})
admin.save(function(err, ret) {
if(err) {
console.log('保存失败')
} else {
console.log('保存成功!')
console.log(ret)
}
}) */
// 查询数据操作
// 1.查询所有数据
/* User.find(function(err, ret) {
if(err) {
console.log('查询失败')
} else {
console.log(ret)
}
}) */
// 2.按条件查询数据,返回值为数组
/* User.find({
username: 'zepzep'
}, function(err, ret) {
if (err) {
console.log('查询失败')
} else {
console.log(ret)
}
})
*/
// 3.按条件查询数据,返回值为查找到的匹配的第一个的对象
/* User.findOne({
username: 'zepzep',
password: '111'
}, function(err, ret) {
if (err) {
console.log('查询失败')
} else {
console.log(ret)
}
}) */
// 删除数据操作
User.remove({
username: 'zepzep'
}, function(err, ret) {
if(err) {
console.log('删除失败')
} else {
console.log('删除成功!')
console.log(ret)
}
})
5.更新数据
// 1.导包
const mongoose = require('mongoose')
const Schema = mongoose.Schema
// 2.连接数据库
// 这里指定连接的数据库mydb可以不需要存在,当你插入第一条数据之后就会帮你自动创建这个数据库
mongoose.connect('mongodb://localhost/mydb')
// 3.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
const userSchema = new Schema({
username: {
type: String,
require: true // 必须有该属性
},
password: {
type: String,
require: true
},
email: {
type: String
}
});
// 3.将文档结构发布为模型
// mongoose.model() 就是用来将一个架构发布为 model
// 第一个参数: 传入一个大写名词单数字符串,用来表示你的数据库名称
// mongoose会自动将大写名词的字符串生成小写复数的集合名称
// 例如:这里的User最终会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
var User = mongoose.model('User', userSchema)
// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行操作
// 新增数据操作
/* var admin = new User({
username: 'zepzep',
password: '000000',
email: '[email protected]'
})
admin.save(function(err, ret) {
if(err) {
console.log('保存失败')
} else {
console.log('保存成功!')
console.log(ret)
}
}) */
// 查询数据操作
// 1.查询所有数据
/* User.find(function(err, ret) {
if(err) {
console.log('查询失败')
} else {
console.log(ret)
}
}) */
// 2.按条件查询数据,返回值为数组
/* User.find({
username: 'zepzep'
}, function(err, ret) {
if (err) {
console.log('查询失败')
} else {
console.log(ret)
}
})
*/
// 3.按条件查询数据,返回值为查找到的匹配的第一个的对象
/* User.findOne({
username: 'zepzep',
password: '111'
}, function(err, ret) {
if (err) {
console.log('查询失败')
} else {
console.log(ret)
}
}) */
// 删除数据操作
/* User.remove({
username: 'zepzep'
}, function(err, ret) {
if(err) {
console.log('删除失败')
} else {
console.log('删除成功!')
console.log(ret)
}
}) */
// 更新数据操作
User.findByIdAndUpdate('6062cff077b662686460e549', {
password: '123'
}, function(err, ret) {
if(err) {
console.log('更新失败')
} else {
console.log('更新成功!')
console.log(ret)
}
})