佛山最好的网站建设,聊城做网站哪里好,php做电影网站,河北省最新任免MongoDB核心
基础概念
数据库
数据库是按照数据结构来组织、存储和管理数据的仓库。在内存中运行的#xff0c;一旦程序运行结束或者计算机断电#xff0c;程序运行中的数据都会丢失。我们需要将一些程序运行的数据持久化到硬盘之中#xff0c;以确保数据的安全性。数据库…MongoDB核心
基础概念
数据库
数据库是按照数据结构来组织、存储和管理数据的仓库。在内存中运行的一旦程序运行结束或者计算机断电程序运行中的数据都会丢失。我们需要将一些程序运行的数据持久化到硬盘之中以确保数据的安全性。数据库就是数据持久化的最佳选择。数据库就是存储数据的仓库。
数据库分类
关系型数据库
MySQL、Oracle、DB2、SQL Server ······关系型数据库中全是表
非关系型数据库 MongoDB、 Redis ······键值对数据库
MongoDB
MongoDB 是一个基于分布式文件存储的数据库.MongoDB 是为快速开发互联网 Web 应用而设计的数据库系统。MongoDB 的设计目标是极简、灵活、作为Web 应用栈的一部分。MongoDB 的数据模型是面向文档的所谓文档是一种类似于 JSON 的结构简单理解 MongoDB 这个数据库中存的是各种各样的JSON. (BSON)
在MongoDB中有三个重要概念
数据库 (database) 数据库是一个数据仓库数据库服务下可以创建多个数据库数居库中可以存放多个集合集合 (collection) 集合类似于 JS 中的数组在集合中可以存放很多文档文档 (document) 文档是数据库中的最小单位类似于 JS 中的对象 与JSON来对比
JSON文件数据库JSON中的一级数组集合数组中的对象文档
MongoDB Shell
MongoDB Shell 是 MongoDB 提供的官方交互式界面允许用户与 MongoDB 数据库进行交互、执行命令和操作数据库。
MongoDB Shell 是基于 JavaScript 的允许用户直接在命令行或者脚本中使用 JavaScript 语言来操作 MongoDB 数据库。
安装完成后可以来使用 MongoDB Shell 连接到 MongoDB 数据库并执行操作。 数据库命令
1.显示所有数据库 show dbs
2. 切换到指定的数据库 use 数据库名
注如果数据库不存在会自动创建数据库。如果数据库内没有集合show dbs指令不会显示该数据库
3.显示当前所在的数据库 db
4. 删除当前数据库 use 库名db.dropDatabase ()
集合命令
1. 创建集合 db.createCollection ( 集合名称 )
2.显示当前数据库中的所有集合 show collections
3.删除某个集合 db. 集合名.drop
4.重命名集合 db.集合名.renameCollection(newName)
文档命令
1.插入文档 db. 集合名.insert (文档对象)
2.查询文档 db. 集合名.find (查询条件)例db.test.find({name:张三})
注查询后结果中_id 是 mongodb 自动生成的唯一编号用来唯一标识文档
3. 更新文档 db. 集合名.update (查询条件新的文档)例db. test.update ({name: 张三 },{$set:{age:19}})
注如果新文档不使用$set则会覆盖旧文档
4.删除文档 db. 集合名.remove (查询条件)
Mongoose
Mongoose简介
Mongoose http://www.mongoosejs.net是一个对象文档模型库
可以让我们使用代码来进行操作 mongodb 数据库
使用方法
连接数据库
首先需要安装Mongoose npm i mongoose
//导入mongoose
const mongoose require(mongoose);//连接数据库 mongodb://ip:端口/数据库名
mongoose.connect(mongodb://127.0.0.1:27017/test)//设置回调函数
//连接成功回调
mongoose.connection.once(open, () {console.log(数据库连接成功)
})//连接失败回调
mongoose.connection.once(err, () {console.log(数据库调用失败);
})//连接关闭回调
mongoose.connection.once(close, () {console.log(数据库连接关闭);
})//开启定时器关闭链接
setTimeout(() {mongoose.disconnect()
}, 3000)
创建文档结构对象和文档模型对象
//导入mongoose
const mongoose require(mongoose)//链接数据库
mongoose.connect(mongodb://127.0.0.1:27017/dome)//创建文档结构对象
//该对象用于规定文档结构
let gameSchema new mongoose.Schema({name: String,price: Number
})//创建文档模型对象
//该对象内封装方法用于操作数据库
//传参(集合名文档结构对象)
let gameModel mongoose.model(games, gameSchema)//设置链接成功后的回调
mongoose.connection.once(open, () {console.log(数据库连接成功);testDocumentation() //调用封装好的方法进行增删改查
})
字段值验证 Mongoose 有一些内建验证器可以对字段值进行验证
字段值验证在创建文档结构对象时进行
let personSchema new mongoose.Schema({name: {type: String,required: true //必填项},age: {type: Number,default: 18 //默认值},sex: {type: String,enum: [男, 女] //枚举值设置的值必须是数组中的},card: {type: Number,unique: true //唯一值新建集合才有效果}
})
添加文档增
添加文档可以使用文档模型对象中的create方法来添加批量添加可以使用insertMany方法
添加一条时传入参数为符合文档结构对象的对象
async function AddDocumentation() {//添加文档//使用文档模型对象中的create方法try {let add await gameModel.create({name: 艾尔登法环,price: 298})console.log(add);} catch (error) {console.log(error);}//关闭数据库mongoose.disconnect()
}
添加多条传入数组数组内为符合文档结构对象的对象
//增加多条
async function AddDocumentationMany() {try {let add await gameModel.insertMany([{name: 无限机兵,price: 159},{name: 匹诺曹,price: 298}])console.log(add);} catch (err) {console.log(err);}//关闭数据库mongoose.disconnect()
}
注Mongoose 6.x 版本之后的 API 变更。从 Mongoose 6 开始所有的异步操作如 Model.create()、find()、save() 等都不再支持回调函数而是强制使用 Promise 或 async/await 语法。
控制台输出 删除文档删
删除使用 deleteOne方法和deleteMany方法。
传入一个查询参数即可
deleteOne为单独删除
async function DeleteDocumentOne() {try {let Delete await gameModel.deleteOne({_id: 68522ffc56b9a48fd708b8fc})console.log(Delete);} catch (err) {console.log(err);}mongoose.disconnect()
}
deleteMany为批量删除
async function DeleteDocumentMany() {try {let Delete await gameModel.deleteMany({name: 黑暗之魂1})console.log(Delete);} catch (err) {console.log(err);}mongoose.disconnect()
} 控制台输出 更新文档改
更新使用 updateOne方法和updateMany方法。
需要传入两个参数第一个为查询参数第二个为更新参数
该方法是直接在旧文档进行修改不存在新文档覆盖旧文档故不用$set
updateOne为单独更新
async function UpdateDocumentOne() {try {let update await gameModel.updateOne({ _id: 68523020764ff87f3b7cabbd },{ name: 魂5 })console.log(update);} catch (err) {console.log(err);}mongoose.disconnect()
}
updateMany为批量更新
async function UpdateDocumentMany() {try {let update await gameModel.updateMany({ name: 黑暗之魂3 },{ price: 99 })console.log(update);} catch (err) {console.log(err);}mongoose.disconnect()
}控制台输出 查询文档查
查询分为单独查询ID查询和批量查询
分别使用 findOne ( ) , findById ( ) , find ( ) 方法
单独查询需要传入查询参数ID查询需要传入ID批量查询传不传参数都可以
批量查询若不传参则为查询全部数据
单独查询
//查询一条数据
async function FindDocumentOne() {try {let find await gameModel.findOne({ name: 无限机兵 })console.log(find);} catch (err) {console.log(err);}
}
ID查询
//通过ID查询
async function FindDocumentID() {try {let find await gameModel.findById(6852817f3870d51a37a2df25)console.log(find);} catch (err) {console.log(err);}
}
批量查询
//批量查询
async function FindDocumentMany() {try {let find await gameModel.find({ name: 魂5 })console.log(find);} catch (err) {console.log(err);}
}
控制台输出 条件控制
在查询文档时我们可以设置查询的条件来获取我们想要的数据
运算符
在mongodb中不可以使用 等运算符需要使用相应的符号来替换
运算符代替符号$gt$lt$gte$lte!$ne
使用语法
{ 属性名: { 运算符: 值 } }示例
let find01 await gameModel.find({ price: { $lt: 200 } }) 逻辑运算
运算符逻辑$or逻辑或$and逻辑与
使用语法
{ 运算符: [{ 属性名: 值 }, { 属性名: 值 }
] }示例
let find02 await gameModel.find({ $or: [{ price: 298 }, { price: 99 }] })
混合用法
let find03 await gameModel.find({ $or: [{ price: { $lt: 300 } }, { price: { $gt: 100 } }] })
正则匹配
条件中可以直接使用正则匹配
let find04 await gameModel.find({ name:/魂/ })let find04 await gameModel.find({ name: new RegExp(魂) })
个性化读取
字段筛选
在读取完文档后对象中的一部分数据并不一定是我们所需要的
可以通过字段筛选来获取我们想要的属性
语法
文档模型对象 . find ( ) . select ( { 属性名 : 0 , 属性名: 1 } )
0:不要的字段 1:要的字段
//批量查询
async function FindDocumentMany() {try {let find01 await gameModel.find().select({ _id: 0, name: 1, price: 1 })console.log(find01);} catch (err) {console.log(err);}mongoose.disconnect()
} 数据排序
根据规定属性值排序
语法
文档模型对象 . find ( ) . sort( { 属性名 : 0 / 1 } )
0倒序 1正序
//批量查询
async function FindDocumentMany() {try {let find01 await gameModel.find().select({ _id: 0, name: 1, price: 1 }).sort({ price: 1 })console.log(find01);} catch (err) {console.log(err);}mongoose.disconnect()
} 数据截取
从指定位置获取到指定数量的数据
语法
文档模型对象 . find ( ) . skip( 数字 ) //跳过几个数据
文档模型对象 . find ( ) . limit( 数字 ) //获取几个数据
//批量查询
async function FindDocumentMany() {try {let find01 await gameModel.find().select({ _id: 0, name: 1, price: 1 }).sort({ price: 1 }).skip(2).limit(3)console.log(find01);} catch (err) {console.log(err);}mongoose.disconnect()
}
文章转载自: http://www.morning.sqmlw.cn.gov.cn.sqmlw.cn http://www.morning.bkpbm.cn.gov.cn.bkpbm.cn http://www.morning.lswgs.cn.gov.cn.lswgs.cn http://www.morning.sjftk.cn.gov.cn.sjftk.cn http://www.morning.rjjys.cn.gov.cn.rjjys.cn http://www.morning.amlutsp.cn.gov.cn.amlutsp.cn http://www.morning.hcrxn.cn.gov.cn.hcrxn.cn http://www.morning.fqtdz.cn.gov.cn.fqtdz.cn http://www.morning.srndk.cn.gov.cn.srndk.cn http://www.morning.rymd.cn.gov.cn.rymd.cn http://www.morning.qlrtd.cn.gov.cn.qlrtd.cn http://www.morning.pwwdp.cn.gov.cn.pwwdp.cn http://www.morning.ffydh.cn.gov.cn.ffydh.cn http://www.morning.lzbut.cn.gov.cn.lzbut.cn http://www.morning.lfmwt.cn.gov.cn.lfmwt.cn http://www.morning.rhjhy.cn.gov.cn.rhjhy.cn http://www.morning.xrwtk.cn.gov.cn.xrwtk.cn http://www.morning.qxmnf.cn.gov.cn.qxmnf.cn http://www.morning.rynrn.cn.gov.cn.rynrn.cn http://www.morning.rmxwm.cn.gov.cn.rmxwm.cn http://www.morning.nbqwr.cn.gov.cn.nbqwr.cn http://www.morning.dktyc.cn.gov.cn.dktyc.cn http://www.morning.mwwnz.cn.gov.cn.mwwnz.cn http://www.morning.fwllb.cn.gov.cn.fwllb.cn http://www.morning.cjsrg.cn.gov.cn.cjsrg.cn http://www.morning.tfwg.cn.gov.cn.tfwg.cn http://www.morning.wqngt.cn.gov.cn.wqngt.cn http://www.morning.nhpgm.cn.gov.cn.nhpgm.cn http://www.morning.qnkqk.cn.gov.cn.qnkqk.cn http://www.morning.ydzly.cn.gov.cn.ydzly.cn http://www.morning.chrbp.cn.gov.cn.chrbp.cn http://www.morning.fcpjq.cn.gov.cn.fcpjq.cn http://www.morning.qdxtj.cn.gov.cn.qdxtj.cn http://www.morning.wtsr.cn.gov.cn.wtsr.cn http://www.morning.tnrdz.cn.gov.cn.tnrdz.cn http://www.morning.cwrpd.cn.gov.cn.cwrpd.cn http://www.morning.kmqlf.cn.gov.cn.kmqlf.cn http://www.morning.c7501.cn.gov.cn.c7501.cn http://www.morning.rfyff.cn.gov.cn.rfyff.cn http://www.morning.qnxzx.cn.gov.cn.qnxzx.cn http://www.morning.bpzw.cn.gov.cn.bpzw.cn http://www.morning.qptbn.cn.gov.cn.qptbn.cn http://www.morning.hmbtb.cn.gov.cn.hmbtb.cn http://www.morning.yrnyz.cn.gov.cn.yrnyz.cn http://www.morning.pkdng.cn.gov.cn.pkdng.cn http://www.morning.yqqxj26.cn.gov.cn.yqqxj26.cn http://www.morning.mqpdl.cn.gov.cn.mqpdl.cn http://www.morning.qinhuangdjy.cn.gov.cn.qinhuangdjy.cn http://www.morning.cpzkq.cn.gov.cn.cpzkq.cn http://www.morning.jzklb.cn.gov.cn.jzklb.cn http://www.morning.ckfqt.cn.gov.cn.ckfqt.cn http://www.morning.qdcpn.cn.gov.cn.qdcpn.cn http://www.morning.qqrlz.cn.gov.cn.qqrlz.cn http://www.morning.msbmp.cn.gov.cn.msbmp.cn http://www.morning.drbd.cn.gov.cn.drbd.cn http://www.morning.ssmhn.cn.gov.cn.ssmhn.cn http://www.morning.wdhhz.cn.gov.cn.wdhhz.cn http://www.morning.csjps.cn.gov.cn.csjps.cn http://www.morning.dmwck.cn.gov.cn.dmwck.cn http://www.morning.qtkdn.cn.gov.cn.qtkdn.cn http://www.morning.pwghp.cn.gov.cn.pwghp.cn http://www.morning.snjpj.cn.gov.cn.snjpj.cn http://www.morning.xxwl1.com.gov.cn.xxwl1.com http://www.morning.xpqyf.cn.gov.cn.xpqyf.cn http://www.morning.cwcdr.cn.gov.cn.cwcdr.cn http://www.morning.tscsd.cn.gov.cn.tscsd.cn http://www.morning.jjhrj.cn.gov.cn.jjhrj.cn http://www.morning.sbjhm.cn.gov.cn.sbjhm.cn http://www.morning.lbhck.cn.gov.cn.lbhck.cn http://www.morning.dyght.cn.gov.cn.dyght.cn http://www.morning.ruifund.com.gov.cn.ruifund.com http://www.morning.amonr.com.gov.cn.amonr.com http://www.morning.srxhd.cn.gov.cn.srxhd.cn http://www.morning.nxfwf.cn.gov.cn.nxfwf.cn http://www.morning.dxgt.cn.gov.cn.dxgt.cn http://www.morning.24vy.com.gov.cn.24vy.com http://www.morning.nwczt.cn.gov.cn.nwczt.cn http://www.morning.srrrz.cn.gov.cn.srrrz.cn http://www.morning.hrdx.cn.gov.cn.hrdx.cn http://www.morning.ybmp.cn.gov.cn.ybmp.cn