速通MongoDB基础知识

MongoDB是一种非关系型数据库,与传统的关系型数据库相比,其数据结构更加灵活、可扩展性更高,支持更多的数据类型和数据操作,同时也具有更好的性能和可伸缩性。了解MongoDB基础知识可以帮助我们更好地设计和优化数据模型,提高应用性能和可扩展性,也有助于理解后端开发中的一些概念和技术。

1-NoSQL数据库介绍

NoSQL是指非关系型数据库,与传统的关系型数据库相对应。在NoSQL数据库中,数据是以键值对、文档、列族或图形等方式进行存储,而非传统的二维表格的形式。

相比于传统的关系型数据库,NoSQL数据库具有更好的可扩展性、更好的性能和更高的灵活性。常见的NoSQL数据库有MongoDB、Cassandra、Redis、Couchbase等。我在百度上找了个图,形象地展现两个数据库的差异(如有侵权,请联系我删除)


可以将传统数据库比喻为图书馆,每本书都有明确的编号、分类、位置等信息,检索和管理起来比较繁琐。而 NoSQL 数据库则可以比喻成一个散乱的书房,书籍没有明确的编号和分类,但可以根据需要进行快速检索和管理,使用起来更加灵活和便捷。

也就是说,传统数据库像是一份结构化的问卷,填写和查询都需要按照规定的格式,而 NoSQL 数据库则像是自由格式的笔记本,更适合处理非结构化和大规模数据。

2-MongoDB的概念和特点

MongoDB是一个面向文档的数据库,以JSON格式存储数据,具有丰富的查询语言和高性能的读写能力,同时也支持数据的自动分片和多副本部署等功能,可以轻松应对大规模数据的处理。具有以下几大特点

2.1-非关系型数据库

MongoDB是一种非关系型数据库,也被称为NoSQL数据库,与传统的关系型数据库不同,MongoDB的文档可以有不同的结构,可以嵌套和扩展字段,使得数据建模更加灵活和自由。

2-2文档存储

MongoDB的数据是以文档的形式存储,每个文档是一个键值对的集合,类似于JSON格式,可以嵌套子文档,支持数组类型的字段。MongoDB支持多种数据类型,包括文本、数值、日期、数组、对象等。

2.3-分布式存储

MongoDB支持分布式存储,可以通过横向扩展来实现高可用性和可扩展性,通过数据分片的方式,将数据分散存储在多个节点上,从而提高数据的可用性和性能。

2.4-高性能

MongoDB具有高性能的特点,可以支持快速的读写操作,同时支持复杂的查询语句和索引,提供了多种查询方式和排序方式。

2.5-可扩展性

MongoDB的架构设计可以很好地支持横向扩展,可以通过增加节点来扩展数据存储和处理能力,从而适应不断增长的数据规模和访问量。

2.6-数据安全

MongoDB提供了安全认证机制和数据加密等安全措施,可以保障数据的安全性和完整性。

3-MongoDB的安装和配置

我的技术栈是js,下面用win电脑和node.js举个例子

3.1-下载并安装MongoDB

在MongoDB官网下载对应操作系统的安装包,按默认配置傻瓜式安装即可。

https://www.mongodb.com/docs/manual/

3.2-配置环境变量

在操作系统的环境变量中添加MongoDB的安装路径

C:\Program Files\MongoDB\Server\5.0\bin。

3.3-创建数据存储目录

创建data的目录,在该目录下创建两个空文件夹db和logs,用于存储数据库文件和日志文件。

D:\MongoDB\data\db
D:\MongoDB\data\logs

3.4-启动MongoDB服务

在终端或命令行窗口中输入命令mongod

mongod

启动MongoDB服务,如果启动失败,需要检查是否有其他程序占用了MongoDB默认的端口号(27017),可以在启动命令中指定端口号

mongod --port <port number>。

3.5-连接MongoDB

如果连接失败,需要检查连接参数是否正确,例如是否指定了正确的IP地址和端口号

mongo --host <host name> --port <port number>

3.6-node.js案例

const MongoClient = require('mongodb').MongoClient;const uri = "mongodb://localhost:27017/mydb";MongoClient.connect(uri, function(err, db) {if (err) throw err;const dbo = db.db("mydb");dbo.collection("customers").findOne({}, function(err, result) {if (err) throw err;console.log(result);db.close();});
});

4-MongoDB的基本操作和命令行操作

连接MongoDB成功后,我们就可以开始进行基本操作了,也就是增删改查。下面是一些常用的命令行操作:

4.1-插入数据

向当前集合中插入一条文档,document为一个JSON对象,表示需要插入的数据

db.collection.insert(document)

使用insertOne就是插入一条数据,如果需要插入多条文档就用insertMany方法

db.collection('users').insertOne({name: 'John', age: 30});
db.collection('users').insertMany([{name: 'Jane', age: 25}, {name: 'Jack', age: 35}]);

4.2-查询数据

使用find方法来查询数据,可以通过指定条件来筛选出符合条件的数据

db.collection.find(query, projection):

查询当前集合中的文档,query为查询条件,projection为可选参数,表示需要返回的字段。查询条件和返回字段都可以使用MongoDB的查询操作符进行设置。

db.collection('users').find({age: {$gt: 25}});

其中, g t 表示大于, gt表示大于, gt表示大于,lt表示小于,$eq表示等于等等。

4.3-更新数据

db.collection.update(query, update, options)

更新当前集合中符合条件的文档,query为查询条件,update为需要更新的字段,options为可选参数,用于设置更新操作的一些属性。也可以使用updateOne或updateMany方法来更新数据

db.collection('users').updateOne({name: 'John'}, {$set: {age: 40}});
db.collection('users').updateMany({age: {$lt: 30}}, {$set: {age: 30}});

4.4-删除数据

db.collection.delete(query)

删除当前集合中符合条件的文档,query为查询条件,同样地,也可以使用deleteOne或deleteMany方法来删除数据

db.collection('users').deleteOne({name: 'John'});
db.collection('users').deleteMany({age: {$lt: 30}});

4.5 -其他命令

// 删除当前所在的数据库
db.dropDatabase()  // 创建一个集合(类似于传统数据库中的表),name为集合名称,options为可选参数,用于设置集合的一些属性
db.createCollection(name, options)// 删除当前集合
db.collection.drop()// 使用聚合管道对当前集合进行聚合操作。聚合管道是一系列的聚合阶段,每个阶段都对输入文档进行转换,然后将转换结果传递给下一个阶段。
db.collection.aggregate(pipeline)// 为当前集合中的文档创建索引,keys为需要创建索引的字段,options为可选参数,用于设置索引的一些属性。索引可以提高查询性能。
db.collection.ensureIndex(keys, options)

这些命令行操作只是MongoDB的冰山一角,还有很多高级用法和命令可以深入学习。

大前端养成之路:学一点MongoDB(一)相关推荐

  1. 大前端养成之路:学一点MongoDB(二)

    MongoDB数据建模 MongoDB数据建模是使用MongoDB进行数据存储和管理的重要环节.下面将分为三部分,分别是数据建模基础知识.MongoDB数据建模原则以及数据建模案例实战.同时,还将使用 ...

  2. 大前端进击之路(一):函数式编程

    转自:掘金 - 跟兔虫 函数式编程概念 一.什么是函数式编程 函数式编程(Functional Programming, FP),是一种编程风格,也可以认为是一种思维模式,和面向过程.面向对象是并列的 ...

  3. 网页设计大赛大神养成之路第一天

    在慕课网进行了第一次的学习,因为我的专业有开设相似课程,再加上老师讲的通俗易懂,所以听起来不算费力.这让我有了小小的信心. 在已经被教会了如何编写代码来设计网络页面后,再来慕课网详细学习前端开发的工具 ...

  4. 从“石器时代”到“超越时代”,阿里 OTT 大屏前端建设之路

    作者 | 阿里文娱前端技术专家-默吉 责编 | 郑丽媛 头图 | CSDN 下载自视觉中国 转眼间2020年已过半,我投身到OTT端开发已经5年有余,回首OTT端(酷喵APP)前端建设历程,感慨良多. ...

  5. 前端开始学java_[Java教程]开启前端学习之路

    [Java教程]开启前端学习之路 0 2014-06-10 17:00:06 前言 第一次在博客园写博客,写写自己开启前端学习之路.应该是受邢师兄的影响吧,不得不说邢师兄人很好,学习也很认真,师兄的前 ...

  6. 2023年中高级前端养成指南-需要关注和学习的13大类80余个前端技术栈与前端趋势-看这篇就够了系列

    今天是兔年开工的第一个星期一,我们又要投入到忙碌的工作了. 以下是imqdcn研究整理的2023年中高级前端养成指南,收藏起来,从开工第一天起,立下全新的计划和目标,愿你在兔年大展宏兔,扬眉兔气. 文 ...

  7. Flutter快学快用开篇词 通往大前端的一把关键钥匙 Flutter

    你好,欢迎来到 Flutter 课程,我是清弦. 近 10 年来,我一直在一线大厂从事 Web 前端研发工作,负责前端.中台业务以及跨端平台的研发和团队管理.目前大前端因为"一套代码,多端运 ...

  8. react在线文件_在线教育大前端架构演进之路

    前段时间,本人有幸于在深圳GMTC大前端架构演进专场进行分享.其后应叶冉编辑邀请,总结了此次分享的演讲稿<腾讯在线教育大前端架构演进之路>.首先做一下自我介绍.我是来自腾讯的工程师 hai ...

  9. 为什么要选择html5,5分钟告诉你,为什么要学HTML5大前端

    互联网的掘起,让这世界再次被认知能力,5G.人工智能技术.数据分析.云计算技术等.凭着优秀的深度学习.数据处理方法技术性,人们已经以全新升级的层面在平行世界里思索,这一切最后都将在终端设备中完成. H ...

最新文章

  1. Office 2007无法修复、卸载、重装
  2. [zz]用U盘装win7/XP系统的操作[图解]
  3. C#相关的DateTime操作
  4. 抛开约束,增强模型:一行代码提升 ALBERT 表现
  5. Linux 文件 IO
  6. Dos批处理检测NetFramework,并自动安装后运行指定程序(转)
  7. Android软件开发-ProgressBar
  8. 力扣637. 二叉树的层平均值(JavaScript)
  9. Name Disambiguaiton in Aminer论文解读
  10. 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 (转)
  11. [渝粤教育] 中国地质大学 管理信息系统 复习题 (2)
  12. 基于PyTorch的深度学习--创建卷积神经网络-面向对象的神经网络
  13. Java解压ZIP、RAR文件
  14. Mac下复制粘贴的快捷键是什么?随记
  15. 记事本app TOP5(个人观点)
  16. 蒙特卡洛python求解派_利用蒙特卡洛(Monte Carlo)方法计算π值[ 转载]
  17. 校园招聘可以报考哪些岗位?
  18. 基于Android开发的车牌识别app源码
  19. 22021年江苏高考成绩查询,2021年江苏高考位次查询及一分一段表排名查询
  20. MySQL之增删改以及外键作用

热门文章

  1. 计算机科学家丁诚,丁平尖
  2. 小程序点击video暂停/开始
  3. gitlab关闭用户注册功能
  4. C语言易错点汇总(二)
  5. PTA寒假基础题训练(含解题思路)(中)
  6. 数据库和databus
  7. 《The Art of Assembly Language》中文名:汇编语言编程艺术 中英文正式版本下载
  8. 最新盘点丨今年的Google I/O开发者大会有哪些看点?
  9. 网络销售-----让客户绝对产生购买欲望的二十个技巧(一)
  10. win10系统应用程序无法正常启动提示0xc0000142错误的解决方法