Node学习-第五章-数据可持续化

发布于:2024-07-05 ⋅ 阅读:(18) ⋅ 点赞:(0)

MongoDB

什么是mongoDB?

mongodb 呢,它是一个基于文档存储的分布式非关系性数据库系统。
“基于文档”指的是:所有存放的的数据都是以文件存到我们的磁盘里面的。
其中数据库系统底层是通过C语言开发,对文件的存储性能还是十分不错的。

关系性数据库与非关系型的区别

  1. 数据存储方式
    关系型数据库,数据以行和列的形式存储在表格中,表格通过关系相互连接。而非关系型数据库则不采用固定的表格格式,数据通常存储在数据集中,如文档、键值对或图形结构。
    2.数据扩展方式
    关系型数据库通常通过纵向扩展,即提高单台服务器的处理能力来扩展。而非关系型数据库则更倾向于横向扩展,通过添加更多的服务器节点来分担负载,这种扩展方式更适合大数据量和高并发的场景。

适用场景有哪些?

MongoDB 数据库的优势大概有这些:高可用性:MongoDB采用了分布式架构,数据会自动分布在多台服务器上,从而实现高可用性和容错性。如果一个节点故障,系统会自动将其从集群中删除,并将数据迁移至其他节点上。
高扩展性:MongoDB可以轻松地进行水平扩展和垂直扩展。在水平扩展时,可以添加更多的服务器和节点,以增加处理能力和存储容量;在垂直扩展时,则可以升级硬件设备,以提高单机性能。
灵活性:MongoDB支持动态模式和动态查询,可以根据应用程序需求灵活调整文档结构和查询条件。此外,它还支持复杂的文档嵌套、数组类型和地理位置等特性。
性能优势:MongoDB使用了内存映射文件和快速索引等技术,具有较高的读写性能和查询效率。此外,MongoDB还支持分片和副本集等技术,以进一步提高性能和可靠性。
参考:https://zhuanlan.zhihu.com/p/689256760

MongoDB适合以下几种应用场景:
社交场景:使用MongoDB存储用户信息,朋友圈信息,通过地理位置索引实现附近的人、定位功能。
物联网场景:使用MongoDB存储设备信息、设备汇报的日志信息、并对这些信息进行多维度分析。
视频直播:使用MongoDB存储用户信息、点赞互动信息。
内容管理:使用MongoDB存储文章、评论、标签等内容,支持全文搜索、分类、排序等功能。
参考:https://zhuanlan.zhihu.com/p/689256760

常用mongoShell 命令

// 启动数据库
brew services start mongodb-community
// 停用数据库
brew services stop mongodb-community
// mongo 指令 需要安装 mongosh
// MongoDB的Shell工具mongosh是一个全功能的JavaScript和Node.js的14.x REPL与MongoDB的部署交互环境。我们通过它可以直接对数据库进行查询和操作

mongosh // 启用shell 命令

1.数据库操作指令

show databases 或 show dbs // 展示有哪些数据库
use 数据库名 // 切换或创建数据
db.dropDatabase() // 删除当前数据库
db / db.getName()/ 查看当前数据库名称
db.stats() // 显示当前数据库状态
db.version() // 查看当前版本

2.集合操作指令

db.createCollection(集合名, [参数]) // 创建集合
show collections/show tables // 查看集合
db.集合名.drop() // 删除集合

3.数据操作指令

1、新增
db.集合名.insert({“键名1”:值1, “键名2”: 值2 …})

2、查询
db.集合名.findOne() // 查询第一条
db.集合名.find() // 查询全部
db.集合名.find({查找条件}) // 按条件查找
例如:
db.user.find({“age”: {$gt: 24}}) // 查询年龄大于24岁的,user集合中符合的数据

3、修改
db.集合名.update({查询条件}, {修改后结果}) // 修改整行
db.students.update({查找条件}, {KaTeX parse error: Expected 'EOF', got '}' at position 41: …修改的字段名2”: “值2”}}̲) #修改指定字段的值 db.…set:{“age”:26}})

4、删除
db.集合名.remove({查询条件})
db.集合名.remove({}) # 删除全部数据
db.user.remove({“name”:“张三”})
db.user.remove({})

node 中使用monogodb

  1. 安装mongodb 依赖
npm init -y
npm install  mongodb
  1. 实际操作代码
const { MongoClient } = require("mongodb"); // 引入方法
const client = new MongoClient('mongodb://127.0.0.1:27017') // 链接数据库服务地址
// const main = async()=>{
//   await client.connect(); // 创建链接
//   const db = client.db('test'); // 获取目标数据库
//   const cc = db.collection('cc'); // 获取目标数据集合
//   var d = await cc.find(); // 打印数据
//   console.log(await d.toArray())
// }
// main().finally(()=>{
//   client.close();  // 链接关闭 释放线程
// });
const clientFun = async function(c){
  await client.connect(); // 创建链接
  const db = client.db('test');
  return db.collection(c)
}
const main = async ()=>{
  var cc = await clientFun('cc');
  // 添加操作
  // 单次
  // var d = await cc.insertOne({name:'ss', age:10})
  // 多组数据添加
  // var d = await cc.insertMany([{name:'ss2', age:11}, {name:'ss3', age:12}, {name:'ss4', age:14}])
  // console.log(d)

  // 查询操作
  // 单个查询   
  // var d = await cc.findOne({age:{$gt:11}})
  // console.log(d)
  // 查询 多个
  // var d = await cc.find({age:{$gt:11}})
  // console.log(await d.toArray())

  // 更改
  // 单个更改
  // var d = await cc.updateOne({age: {$gt:9}}, {$set:{name: 'lisi', age:100}});
  // console.log(d)
  //多个数据更改
  // var d = await cc.updateMany({age:{$gt:11}}, {$set:{name: '改起来'}})
  // console.log(d);

  // 删除操作 
  // 单个删除
  // const d = await cc.deleteOne({age: {$lt: 11}});
  // 多个数据删除
  const d = await cc.deleteMany({age: {$gt: 99}});
  console.log(d)
}
main().finally(()=>{
    client.close();  
});