Mongodb是一个基于分布式文件存储的数据库,官方地址:https://www.mongodb.com/
Mongodb操作语法与JavaScript类似,容易上手
可以通过JSON文件来理解Mongodb中的概念
一般情况下,一个项目使用一个数据库,一个集合会存储同一种类型的数据
下载地址:https://www.mongodb.com/try/download/community
show dbs
use 数据库名
db
use 库名
dbs.dropDatabase()
db.createCollection('集合名称')
show collections
db.集合名.drop()
db.集合名.renameCollection('newname')
db.集合名.insert(文档对象)
db.集合名.find(查询条件)
_id是mongodb自动生成的唯一编号,用来唯一标识文档
db.集合名.update(查询条件,新的文档)
db.集合名.update({name:'张三'},{$set:{age:19}})//更改局部信息
db.集合名.remove(查询条件)
用户注册
发布视频
发布商品
发朋友圈
发评论
发微博...
删除评论
删除商品
删除文章
删除视频
删除微博...
更新个人信息
修改商品价格
修改文章内容
商品列表
视频列表
朋友圈列表
微博列表...
Mongoose是一个对象文档模型库,官网http://www.mongoosejs.net/
作用:方便使用代码操作mongodb数据库
- // 安装mongoose
- // 导入mongoose
- const mongoose=require('mongoose')
- // 连接mongodb服务
- mongoose.connect('mongodb://127.0.0.1:27017/bilibili')
- // 设置回调 once一次 事件回调函数只执行一次,当mongodb服务关闭再重启时,就不会再执行回调函数,而on仍会执行回调函数
- mongoose.connection.once('open',()=>{
- console.log('连接成功')
- })//设置连接成功的回调
- mongoose.connection.on('error',()=>{
- console.log('连接失败')
- })//设置连接错误的回调
- mongoose.connection.once('close',()=>{
- console.log('连接关闭')
- })//设置连接关闭的回调
- // 关闭mongodb的连接
- setTimeout(()=>{
- mongoose.disconnect()
- },2000)
- // 安装mongoose
- // 导入mongoose
- const mongoose=require('mongoose')
- // 连接mongodb服务
- mongoose.connect('mongodb://127.0.0.1:27017/bilibili')
- // 设置回调 once一次 事件回调函数只执行一次,当mongodb服务关闭再重启时,就不会再执行回调函数,而on仍会执行回调函数
- //设置连接成功的回调
- mongoose.connection.once('open',()=>{
- // 创建文档的结构对象
- // 设置集合中文档的属性以及属性值的类型
- let BookSchema=new mongoose.Schema({
- name:String,
- author:String,
- price:Number
- })
- // 创建模型对象,对文档操作的封装对象,该对象可以完成文档的增删改查操作
- let BookModel=mongoose.model('books',BookSchema)//第一个参数集合名称,第二个参数结构对象
- // 新增
- BookModel.create({
- name:'西游记',
- author:'吴承恩',
- price:19.9
- }).then((err,data)=>{
- // 判断是否有错误
- if(err){
- console.log(err)
- return
- }
- // 如果没有出错,则输出插入后的文档对象
- console.log(data)
- // 关闭数据库连接
- mongoose.disconnect()
- })
- })
- //设置连接错误的回调
- mongoose.connection.on('error',()=>{
- console.log('连接失败')
- })
- //设置连接关闭的回调
- mongoose.connection.once('close',()=>{
- console.log('连接关闭')
- })
文档结构可选的常用字段类型列表
类型 | 描述 |
---|---|
String | 字符串 |
Number | 数字 |
Boolean | 布尔值 |
Array | 数组,也可以使用[]标识 |
Date | 日期 |
Buffer | Buffer对象 |
Mixed | 任意类型,需要使用mongoose.Schema.Types.Mixed指定 |
Objected | 对象ID,需要使用mongoose.Schema.Types.ObjectId指定 |
Decimal128 | 高精度数字,需要使用mongoose.Schema.Types.Decimal128指定 |
Mongoose有一些内建验证器,可以对字段值进行验证
必填项
- title:{
- type:String,
- required:true//设置必填项
- }
默认值
- author:{
- type:String,
- default:'匿名'//默认值
- }
枚举值
- gender:{
- type:String,
- enum:['男','女']//设置的值必须是数组中的
- }
唯一值
- username:{
- type:String,
- unique:true//unique在重建集合的情况下才能使用
- }
mongoose会使用集合名称的复数,创建集合
- // 删除一条
- BookModel.deleteOne({_id:'sfdhnaifh'}).then((err,data)=>{
- if(err){
- console.log('删除失败')
- return
- }
- console.log(data)
- })
- // 批量删除
- BookModel.deleteMany({is_hot:false}).then((err,data)=>{
- if(err){
- console.log('删除失败')
- return
- }
- console.log(data)
- })
- // 更新文档 一条 参数 条件 修改内容
- BookModel.updateOne({name:'红楼梦'},{price:9.9}).then((err,data)=>{
- // 判断err
- if(err){
- console.log('更新失败')
- return
- }
- console.log(data)
- })
- BookModel.updateMany({author:'余华'},{is_hot:true}).then((err,data)=>{
- // 判断err
- if(err){
- console.log('更新失败')
- return
- }
- console.log(data)
- })
- // 读取单条
- BookModel.findOne({name:'狂飙'}).then((err,data)=>{
- if(err){
- console.log('读取失败')
- return
- }
- console.log(data)
- })
- // 根据id获取文档
- BookModel.findById('afjhkkfa').then((err,data)=>{
- if(err){
- console.log('读取失败')
- return
- }
- console.log(data)
- })
- // 批量获取
- BookModel.find({author:'余华'}).then((err,data)=>{
- if(err){
- console.log('读取失败')
- return
- }
- console.log(data)
- })
- //读取所有
- BookModel.find().then((err,data)=>{
- if(err){
- console.log('读取失败')
- return
- }
- console.log(data)
- })
在monfodb不能> < >= <= !==等运算符,需要使用替代符号
db.students.find({id:{$gt:3}}); id号比3还大的所有的记录
$or 逻辑或的情况
db.students.find({$or:[{age:18},{age:24}]})
$and 逻辑与的情况
db.students.find({$and:[{age:{$lt: 20}},{age:{$gt:15}}]});
条件中可以使用JS的正则语法,通过正则可以进行模糊查询
db.students.find({name:/missyou/});
- //1 要的字段 0 不要的字段
- BookModel.find().select({name:1,author:1}).exec((err,data)=>{
- if(err){
- console.log('查询失败')
- return
- }
- console.log(data)
- })
- //1 升序 -1 降序
- BookModel.find().select({name:1,price:1,_id:0}).sort({price:1}).exec((err,data)=>{
- if(err){
- console.log('查询失败')
- return
- }
- console.log(data)
- })
- //skip 跳过 limit 限定 从高到低排序,(跳过三个之后)取出前三
- BookModel.find().select({name:1,price:1,_id:0}).sort({price:1}).skip(3).limit(3).exec((err,data)=>{
- if(err){
- console.log('查询失败')
- return
- }
- console.log(data)
- })
我们可以使用图形化的管理工具来对Mongodb进行交互