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

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 依赖
javascript 复制代码
npm init -y
npm install  mongodb
  1. 实际操作代码
javascript 复制代码
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();  
});
相关推荐
Mephisto.java24 分钟前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
武子康2 小时前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
使者大牙2 小时前
【大语言模型学习笔记】第一篇:LLM大规模语言模型介绍
笔记·学习·语言模型
As977_2 小时前
前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)
前端·css·学习
ajsbxi3 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
Rattenking3 小时前
React 源码学习01 ---- React.Children.map 的实现与应用
javascript·学习·react.js
dsywws3 小时前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
道法自然04023 小时前
Ethernet 系列(8)-- 基础学习::ARP
网络·学习·智能路由器
爱吃生蚝的于勒3 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法