MongoDB
什么是mongoDB?
mongodb 呢,它是一个基于文档存储的分布式非关系性数据库系统。
"基于文档"指的是:所有存放的的数据都是以文件存到我们的磁盘里面的。
其中数据库系统底层是通过C语言开发,对文件的存储性能还是十分不错的。
关系性数据库与非关系型的区别
- 数据存储方式
关系型数据库,数据以行和列的形式存储在表格中,表格通过关系相互连接。而非关系型数据库则不采用固定的表格格式,数据通常存储在数据集中,如文档、键值对或图形结构。
2.数据扩展方式
关系型数据库通常通过纵向扩展,即提高单台服务器的处理能力来扩展。而非关系型数据库则更倾向于横向扩展,通过添加更多的服务器节点来分担负载,这种扩展方式更适合大数据量和高并发的场景。
适用场景有哪些?
MongoDB 数据库的优势大概有这些:高可用性:MongoDB采用了分布式架构,数据会自动分布在多台服务器上,从而实现高可用性和容错性。如果一个节点故障,系统会自动将其从集群中删除,并将数据迁移至其他节点上。
高扩展性:MongoDB可以轻松地进行水平扩展和垂直扩展。在水平扩展时,可以添加更多的服务器和节点,以增加处理能力和存储容量;在垂直扩展时,则可以升级硬件设备,以提高单机性能。
灵活性:MongoDB支持动态模式和动态查询,可以根据应用程序需求灵活调整文档结构和查询条件。此外,它还支持复杂的文档嵌套、数组类型和地理位置等特性。
性能优势:MongoDB使用了内存映射文件和快速索引等技术,具有较高的读写性能和查询效率。此外,MongoDB还支持分片和副本集等技术,以进一步提高性能和可靠性。
参考:https://zhuanlan.zhihu.com/p/689256760
MongoDB适合以下几种应用场景:社交场景:使用MongoDB存储用户信息,朋友圈信息,通过地理位置索引实现附近的人、定位功能。
物联网场景:使用MongoDB存储设备信息、设备汇报的日志信息、并对这些信息进行多维度分析。
视频直播:使用MongoDB存储用户信息、点赞互动信息。
内容管理:使用MongoDB存储文章、评论、标签等内容,支持全文搜索、分类、排序等功能。
常用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
- 安装mongodb 依赖
javascript
npm init -y
npm install mongodb
- 实际操作代码
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();
});