文章目录
https://www.mongodb.com/
0.MongoDB数据库的基本概念
- 数据库:一个MongoDB可以有多个数据库
- 集合:一个数据库当中可以有多个集合(数组)
- 文档:一个集合中可以有多个文档(表记录)
文档结构很灵活,没有任何限制
- MongoDB很灵活,不需要向MySQL一样先创建数据库、表、设计表结构
- 在这里只需要:当你需要插入数据的时候,只需要指定往哪个数据库的哪个集合操作就可以了
- 一切都由MongoDB来帮助你完成建库建表这件事
格式:
{
qq:{
user:[
{
name:'小花',age:11},
{
},
]
},
baidu:{
}
}
1.关系型数据库和非关系型数据库
表就是关系
或者说表与表之间存在关系。
- 所有的关系型数据库都需要通过
sql
语言来操作 - 所有的关系型数据库在操作之前都需要设计表结构
- 而且数据表还支持约束
- 唯一的
- 主键
- 默认值
- 非空
- 非关系型数据库非常灵活
- 有的非关系型数据库就是key-value对
MongoDB简说
- 但是MongoDB是长的最像关系型数据库的非关系型数据库
- 数据库-》数据库
- 数据表-》集合(数组)
- 表记录-》(文档对象)
- MongoDB不需要设计表结构,也就是说可以任意往里面存数据,没有结构性这么一说
2.安装
- 下载(选择社区版)
- 安装
- 配置环境变量
- 最后输入
mongod --version
测试是否安装成功
3.启动和关闭数据库
启动:
#mongodb默认使用执行 mongod 命令所处盘符根目录下的 /data/db 作为自己的数据存储目录
#所以在第一次执行该命令之前先自己手动创建一个 /data/db
mongod
如果想要修改默认的数据存储目录,可以:
mongod --dbpath=数据存储目录路径
停止:
#在开启服务的控制台,直接Ctrl + c即可停止
#或者直接关闭开启服务器的控制台
4.连接和退出数据库
连接:
#该命令默认连接本机的MongoDB服务
mongo
退出:
#在连接状态输入exit退出连接
exit
5.基本命令
1.查看显示所有数据库
show dbs
2.查看当前操作的数据库
db
#当操作的数据库里面没有数据时,显示所有的数据库是不会显示出来的
3.切换到指定的数据库(如果没有会新建)
use 数据库名称
4.插入数据
#例子:
use itcase #使用数据库
db.like.insertOne({
"apple":"red"}) #db.集合名.insertOne(json对象)
show collections #显示当前db的所有集合 结果是like
db.like.find() #查询like集合中的所有数据
6.在Node中如何操作MongoDB数据
1.使用官方的mongodb包来操作
https://www.npmjs.com/package/mongodb
2.使用第三方mongoose来操作MongoDB数据库
第三方包:mongoose
基于MongoDB官方的mongodb包再一次做了封装
官网:http://mongoosejs.com
安装:
npm i mongoose
使用:
//引包
const mongoose = require('mongoose');
//连接test数据库
mongoose.connect('mongodb://localhost/test', {
useNewUrlParser: true, useUnifiedTopology: true});
//创建一个模型,就是在设计数据库
const Cat = mongoose.model('Cat', {
name: String });
//实例化一个Cat
const kitty = new Cat({
name: 'Zildjian' });
//持久化保存Kitty实例
kitty.save().then(() => console.log('meow'));
3.官方指南
(1)设计Schema 发布model
var mongoose = require('mongoose')
var Schema = mongoose.Schema
//1.连接数据库
// 指定连接的数据库不需要存在,当插入第一条数据之后就会被自动创建出来
mongoose.connect('mongodb://localhost/test')
// 2.设计文档结构(表结构)
// 字段名称就是表结构中的属性名称
// 约束的目的是为了保证数据的完整性,不要有脏数据
var userSchema = new Schema({
username:{
type:String,
required:true //说明必须有
},
password:{
type:String,
required:true
},
email:{
type:String
}
})
// 3.将文档结构发布为模型
// mongoose.model方法就是用来将一个架构发布为model
// 第一个参数:传入一个大写名词单词字符串用来表示你的数据库名称
// mongoose会自动将大写名词的字符串生成小写复数的集合名称
// 例如这里的User最终会变为users集合名称
// 第二个参数:架构 Schema
// 返回值:模型构造函数
var User = mongoose.model('User',userSchema)
// 4.当有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据进行增删改查了
(2)增加数据
// 增加数据
var admin = new User({
username:'admin',
password:'1212121',
email:'[email protected]'
})
admin.save(function(err,ret){
if(err){
console.log('保存失败')
}else{
console.log('保存成功')
console.log(ret) //ret就是刚刚插入的数据
}
})
(3)查询
- 查询所有
// 查询所有数据
User.find(function(err,ret){
if(err){
console.log('查询失败')
}else{
console.log('查询成功')
console.log(ret)
}
})
- 按条件查询所有
// 按条件查询数据
User.find({
username:'hhh' //查找名为hhh的数据
},function(err,ret){
if(err){
console.log('查询失败')
}else{
console.log('查询成功')
console.log(ret)
}
})
- 按条件只查询第一条数据
// 只找匹配的第一个数据
User.findOne({
username:'hhh' //查找名为hhh的数据
},function(err,ret){
if(err){
console.log('查询失败')
}else{
console.log('查询成功')
console.log(ret)
}
})
(4)删除数据
// 删除数据
User.remove({
username:'hhh',
},function(err,ret){
if(err){
console.log('删除失败')
}else{
console.log('删除成功')
}
})
(5)更新数据
根据条件更新所有:
Model.update(conditions,doc,[options],[callback])
根据指定条件更新一个:
Model.findOneAndUpdate([conditions],[update],[options],[callback])
根据id更新一个:
// 更新数据--通过ID来更新
User.findByIdUpdate('id号',{
password:'33232323'
},function(err,ret){
if(err){
console.log('更新失败')
}else{
console.log('更新成功')
}
})