MongoDB安装与配置
关系型数据库和非关系型数据库
关系型
表就是关系,或者说表与表之间存在关系
所有的关系型数据库都可以通过sql语言来操作
所有的关系型数据库,在操作前都需要设置表结构
而且数据表还支持约束
- 唯一的
- 主键
- 飞空
- 默认值
非关系型
有的非关系型数据库 就是 key-value 对儿
MongoDB是长的最像关系型数据库的非关系型数据库
- 数据库=》数据库
- 数据表=》集合
- 表记录=》文档对象
- MongoDB数据库不需要设计表结构
- 也就是说,我们可以任意的存放数据,不用设计表结构,很灵活
安装于配置(只有部分易出错内容)
1.安装
可以选择 custom 安装!
安装路径不建议更改,不会影响操作系统的运行速度
2.配置环境变量
未配置时:
配置完成时:
启动和关闭数据库(mongoDB)
启动:
//mongoDB 默认会找C盘下data文件中的db作为自己的存储目录
//如果C盘下没有data的话,是执行不成功的,代码也不会默认生成data,所以需要自己建立
mongod
如果想要修改默认的存储路径:
mongod --dbpath='路径'
停止:
//ctrl + c
连接数据库
连接
保持数据库开启不要关闭,另外打开一个cmd
mongo
退出
在连接状态:
exit
基本命令
show dbs
查看显示所有数据 库
db
查看当前操作的数据库
use 数据库名称
切换到指定的数据库(如果没有,会新建)
collections
显示当前db的所有集合
db.students.find()
查看当前集合中所有的数据
基本概念
- 一个mongoDB可以有多个数据库
- 一个数据库可以有多个集合(表)
- 集合简单理解就是数组
- 一个数组可以有多个文档(表记录)
文档结构很灵活,无任何限制
不需要想mysql一样先创建数据库,表,设计表结构
mongoDB只需要:当你需要插入数据的时候,只需要指定往哪个数据库,哪个集合操作数据就可以了,其他都交给mongoDN完成
{//一个mongoDB
weixin:{//一个数据库
user:[//一个集合
{name:'wangxiaoming',age:15},
{anme:'lixiaohong',age:16},
{},
{}
],
products:[
]
}
qq:{
}
}
在node中如何操作mongoDB数据库
1.使用官方的mongDB包来操作
我们不用,太原生了
2.mongoose
基于官方的MongoDB包进行了封装。
官网
安装:
使用npm i mongoose安装
例子:(来自官网)
//加载mongoose文件
const mongoose = require('mongoose');
//连接数据库
mongoose.connect('mongodb://localhost/test');
//设计一个模型,就是在设计数据库
//mongoDB 是动态的,非常灵活,只需要在代码中设计数据库就可以了
//mongoose 这个第三方包,就可以让我们的设计编写过程变得非常的简单
const Cat = mongoose.model('Cat', { name: String });
//实例化一个Cat
const kitty = new Cat({ name: 'Zildjian' });
//持久化保存kitty实例
kitty.save().then(() => console.log('meow'));
mongooose开始
当我们有了模型构造函数之后,就可以使用这个构造函数对 users 集合中的数据为所欲为了(增删改查)
增
var admin = new User ({
username: 'lixiaogong',
password: '123465',
email:'admin@admin.admin'
})
//永久化保存
admin.save(function(err,ret)
{
if (err) {
console.log('保存失败')
} else {
console.log('保存成功')
console.log(ret)
}
})
查
查询所有
User.find(function(err,ret)
{
if (err) {
console.log('查询失败')
}else{
console.log('查询成功')
console.log(ret)
}
})
查询成功
[ { _id: 5b1dde3ff26d8c21282e987f,
username: 'wangxiaoming',
password: '123456',
email: 'admin@admin.admin',
__v: 0 },
{ _id: 5b1ddfd9b5edab1f00ca3782,
username: 'lixiaogong',
password: '123465',
email: 'admin@admin.admin',
__v: 0 },
{ _id: 5b1de2282ddc3e163063dcd8,
password: '123456',
email: 'zhang@zhang.zhang',
__v: 0 } ]
查询一个,默认输出第一个
User.findOne(function(err,ret)
{
if (err) {
console.log('查询失败')
}else{
console.log('查询成功')
console.log(ret)
}
})
查询成功
{ _id: 5b1dde3ff26d8c21282e987f,
username: 'wangxiaoming',
password: '123456',
email: 'admin@admin.admin',
__v: 0 }
按条件查询一个
User.findOne({
username:'wangxiaoming'
},function(err,ret)
{
if (err) {
console.log('查询失败')
}else{
console.log('查询成功')
console.log(ret)
}
})
查询成功
{ _id: 5b1dde3ff26d8c21282e987f,
username: 'wangxiaoming',
password: '123456',
email: 'admin@admin.admin',
__v: 0 }
按条件查询所有
User.find({
username:'wangxiaoming'
},function(err,ret)
{
if (err) {
console.log('查询失败')
}else{
console.log('查询成功')
console.log(ret)
}
})
查询成功
[ { _id: 5b1dde3ff26d8c21282e987f,
username: 'wangxiaoming',
password: '123456',
email: 'admin@admin.admin',
__v: 0 } ]
删
//删除数据
User.remove({
username:'wangxiaoming'
},function(err,ret)
{
if (err) {
console.log('删除失败')
}
else{
console.log('删除成功')
console.log(ret)
}
})
改
User.findByIdAndUpdate('5b1e0f835568cb1fcc5b5a05',{
password:'00000'
},function(err,ret){
if (err) {
console.log('更新失败')
}else{
console.log('更新成功')
}
})