MongoDb介绍
关系型数据库和非关系型数据库
表就是关系
或者说表与表之间存在关系
- 所有的关系型数据库都需要通过
sql
语言来操作 - 所有的关系型数据库在操作之前都需要设计表结构
- 而且设计表还支持约束
- 唯一的
- 主键
- 默认值
- 非空
- 非关系型数据非常的灵活
- 有的非关系型数据库技术key-value对儿
- 但是MongoDB是长度的最想关系型数据库的非关系型数据库
- 数据库–》数据库
- 数据表–》集合(数组)
- 表记录–》(文档对象)
- MongoDB不需要设计表结构
- 也就是说你可以任意的往里面存数据,没有结构性这么一说
安装MongoDB地址
https://www.mongodb.com/download-center/community
可根据自的电脑安装相应的软件包
-
下载
-
安装
-
配置环境变量
-
最后输入mongod --version 测试是否安装成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1YmJp879-1610087378118)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201216145731489.png)]
MongoDB数据库启动和关闭
启动的方式:
# mongodb 默认使用执行 mongodb 命令所处盘符根目录下的 /data/db 作为自己的数据库存储目录
# 第一中方式
mongod --dbpath 找到你存放data/db文件夹
mongod --dbpath D:\MongoDB\data\db
停止:
在开启服务的控制台,直接ctrl+c即可停止
或者直接关闭开启服务的控制台也可以。
如何连接数据库
连接:
# 该命令默认连接本机的mongodb服务
mongo
退出:
# 在连接状态中输入exit 退出连接
exit
基本命令
-
show dbs
- 查看显示所有数据库
-
db
- 查看当前操作的数据库
-
use 数据库名称
- 切换到指定的数据(如果没有会新建)
-
插入数据
db.students.insertOne("name":"java")
在node中如何操作mongoDB
使用官方的
mongodb
包来操作使用第三方mongoose来操作Mongodb数据库
第三方包:
mongoose
基于``MongoDB`包再一次做了封装 - 网站
mongoose
- 官网:http://mongoosejs.com/
- 官方指南:http://mongoosejs.com/docs/guide.html
- 官方API文档:http://mongoosejs.com/docs/api.html
MongoDB数据库的基本概念
-
可以有多个数据库
-
一个数据库中可以有多个集合(表)
-
一个集合中可以有多个文档(表记录)
-
文档结构很灵活,没有任何限制
-
mongodb非常灵活,不需要像MySQL一样先创建数据库、表、表结构
- 在这里只需要,当你需要插入数据的时候,只需要指定往那个数据库的哪个集合操作就可以了
- 一切都由MongoDB来帮你自动完成建库建表这件事
{qq:{ usersL[], oriducts:[] ... }, taobao:{ },baidu:{ }}
1.起步
安装:
npm i mongoose
hello wrold:
const mongoose = require('mongoose');
// 连接MongoDb 数据库
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'));
2.官方指南
2.1设计Schemef发布Model
const mongoose = require('mongoose')
const Schema = mongoose.Schema
// 1.连接数据库
// 该数据库指定连接的数据库不需要存在,当你插入第一条数据之后就会自动被创建出来
mongoose.connect('mongodb://localhost/itcast')
// 2.设计集合结构(表结构)或者设计文档结构
// 字段名称就是表结构中的属性名称
// 值
// 约束的目的是为了保证数据的完整性,不要有脏数据
const blogSchema = new Schema({
username:{
type:String,
required:true
},
passwored:{
type:String,
required:true
},
email:{
type:String
}
});
// 3.将文档结构发布为模型
// Mongoose.model方法就是用来将一个架构发布为model
// 第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称
// mongoose 会自动将大写名词的字符串生成 小写复数 的集合名称
// 例如这里的User最终会变为user集合名称
// 第二个参数:架构Schma
// 返回值:模型构造函数
const User = mongoose.model('User',blogSchema)
// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对user集合中的数据为所欲为了(增删改查)
2.2增加数据
// 4.当我们有了模型构造函数之后,就可以使用这个构造函数对user集合中的数据为所欲为了(增删改查)
const admin = new User({
username:'admin',
password:'123456',
email:'admin@admin.com'
})
admin.save(function (err,ret) {
if (err){
console.log(err)
console.log('保存失败!')
}else {
console.log('保存成功!')
console.log(ret)
}
})
2.3查询所有
// 第一种方法
// function 前面可以写参数数
User.find(function (err,ret) {
if (err){
console.log('查询失败')
}else
{
console.log(ret)
}
})
// 第二种方法
User.findOne(function (err,ret) {
if (err){
console.log('查询失败')
}else
{
console.log(ret)
}
})
2.4按条件查询所有
User.findOne({
name:'zs'
},function (err,ret) {
if (err){
console.log('查询失败')
}else
{
console.log(ret)
}
})
2.5按条件查询单个
User.findOne({
name:'zs'
},function (err,ret) {
if (err){
console.log('查询失败')
}else
{
console.log(ret)
}
})
2.6删除
// 删除数据
User.remove({
username:'admin'
},function (err,ret) {
if (err)
{
console.log('删除失败!')
}else
{
console.log('删除成功!')
console.log(ret)
}
})
2.7更新数据
// 更新数据
User.findByIdAndUpdate('5fdc5ebd19b6de39ac13af3b',{
password:'123'
},function (err,ret) {
if (err)
{
console.log('更新失败!')
}else{
console.log('更新成功!')
console.log(ret)
}
})