mongodb学习笔记
创始人
2025-05-29 04:55:22

一、相关概念

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统,操作起来比较简单和容易。文件存储格式为BSON(一种JSON的扩展),BSON 支持文档和数组的嵌套。

在这里插入图片描述

  • 集合就是 MongoDB 文档组,类似于 RDBMS 中的表格。集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据。
  • 文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

文档

{"site": "https://www.gorit.cn", "name":"CodingGorit"}

集合

{"site": "https://www.gorit.cn"}
{"site": "https://www.gorit.cn", "name":"CodingGorit"}
{"site": "https://www.gorit.cn", "name":"CodingGorit","age":5}

二、与其他数据库的区别

性能比较: Redis > MongoDB > MySQL / Oralce

  1. redis所有数据都是放在内存中的,持久化是使用RDB方式或者aof方式。
  2. mongodb的所有数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。然后,mongodb就在这块区域里面进行数据修改,避免了零碎的硬盘操作。至于mmap上的内容flush到硬盘就是操作系统的事情了,所以,如果,mongodb在内存中修改了数据,然后,mmap数据flush到硬盘之前,系统当机了,就会丢失数据了。
  3. mysql,无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。

三、应用场景

  1. 表结构不明确且数据不断变大。MongoDB是非结构化文档数据库,扩展字段很容易且不会影响原有数据。
  2. 更高的写入负载。MongoDB侧重高数据写入的性能,而非事务安全,适合业务系统中有大量“低价值”数据的场景。
  3. 数据量很大或者将来会变得很大。Mysql单表数据量达到5-10G时会出现明细的性能降级,需要做数据的水平和垂直拆分、库的拆分完成扩展,MongoDB内建了sharding、很多数据分片的特性,容易水平扩展,比较好的适应大数据量增长的需求。
  4. 高可用性。自带高可用,自动主从切换(副本集)

不适用的场景

  1. MongoDB不支持事务操作,需要用到事务的应用建议不用MongoDB。
  2. MongoDB目前不支持join操作,需要复杂查询的应用也不建议使用MongoDB。

四、常用命令的格式

  1. 查询
//查看所有文档记录
db.collection_name.find()// 查询一个文档
db.collection_name.findOne();// -------------------------条件查询-----------------------
// 条件查询 ==
db.user.find({"name":"Gorit111"})  // where name = "张三"  全匹配// 条件查询 小于
db.user.find({"age":{$lt:17}}); // where age < 17// 条件查询 小于或等于
db.user.find({"age":{$lte:20}}); // where age <= 20// 条件查询 大于
db.user.find({"age":{$gt:16}}); // where age > 10// 条件查询 大于或等于
db.user.find({"age":{$gte:16}}); // where age >= 16// 条件查询  不等于
db.user.find({"age":{$ne: 16}})// --------------------------逻辑查询----------------------
// 逻辑与 and 查询
db.user.find({"age":17},{"id":"1"})// 逻辑或 or 查询
db.user.find({$or: [{"age":17},{"id":"1"}]}
)// 组合查询练习
where age <=20 or (name in ("张三","Gorit111")
db.user.find({"age": {$lte: 20},$or: [{"name": "张三"},{"name": "Gorit111"}]}
)//-----------------------------分页查询-----------------
// 分页参数 Limit()
db.collection_name.find().limit(number);
// 查询数据库汇中的三条记录,如果数据库没有指定 limit() ,默认查询所有的数据
db.user.find().limit(3);// 使用 skip() 跳跃指定数量的数据
// 跳过第一条记录,查询往后的三条记录
db.user.find().limit(3).skip(1);
  1. 排序
    在 MangoDB 中使用 sort() 方法对数据进行排序, sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来制定排序方式。1 表示升序列,-1 表示降序列。
// 根据年龄升序
db.user.find().sort({"age":1})// 根据年龄降序排列
db.user.find().sort({"age":-1});
  1. 插入
show dbs; // 查看数据库use test; // 如果 test 数据库不存在,则创建 test// 插入一条记录,如果集合不存在,先创建集合,在插入数据
db.user.insert({"id":"1","name":"Gorit","age":16});// 一次性插入多条记录
db.user.insert({"id":"5","name":"Gorit555","age":16},{"id":"6","name":"Gorit6666","age":18});// 一次性插入多条
db.user.insertMany([{"id":"4","name":"Gori333","age":16},{"id":"4","name":"Gorit4444","age":18}])
  1. 更新
db.collection.update(,,{upsert: ,multi: ,writeConcern: }
)参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如,inc…)等,也可以理解为sql update查询内set后面的。
  1. 删除文档
// 删除所有数据
db.collection_ name.remove({})// 删除指定字段的记录
db.collection_name.remove({"id":"1"})// 删除指定记录的第一条
db.collection_name.remove({"id":"1"},1)// 新版本删除所有的集合
db.collection_name.deleteMany({})// 新版本删除多个 status 为 A的
db.collection_name.deleteMany({ status : "A" })// 新版本删除一个 status 为 D 的集合
db.inventory.deleteOne( { status: "D" } )

三、java连接mongodb

  1. 编写实体类时,类上面注意标记@Document(collection = "ks_app_themes"),表明连接哪张表。
  2. 在SpringBoot框架中,使用Spring Data MongoDB操作MongoDB。即在service层中,注入MongoTemplate,直接调用API进行增删改查。

相关内容

热门资讯

第一部分——简单句——第一章—... 谓语动词的物种变化 (二)情态   情态不变动词 can be/must...
网商银行40亿永续债获批!银行... 本文来源:时代周报 作者:黄宇昆时隔5年,浙江网商银行再次获批发债“补血”。近日,浙江金融监管局发布...
甜粽子和咸粽子都没人吃了? 在端午节的传统美食中,甜粽子和咸粽子曾是人们餐桌上的常客。然而,如今却出现了一种令人惊讶的现象,那就...
超4100只个股下跌 超410... 2025.05.30本文字数:424,阅读时长大约1分钟作者 |一财资讯截至午间收盘,沪指跌0.31...
「午盘」A股早盘弱势震荡收跌,... A股三大股指5月30日集体低开。早盘两市探底回升,三大股指跌势明显,个股呈现普跌态势。从盘面上看,可...
English Learnin... English Learning - L2 语音作业打卡 复习对比 [ɔ:] [ɒ] Day22 2...
Java设计模式 02-工厂模... 工厂模式 一、简单(静态)工厂模式 1、看一个具体的需求 看一个披萨的项目:要便于披萨...
嘉应制药信披违规突遭立案,养天... 5月28日晚,广东嘉应制药股份有限公司(以下简称“嘉应制药”)发布公告,公司收到中国证券监督管理委员...
河北保定蠡县县委书记陈伟已跨市... 澎湃新闻记者从相关方面独家获悉,原任河北保定蠡县县委书记的陈伟近日已跨市调任廊坊三河市委书记。 陈...
4月,全国发行新增债券2534... 2025年4月地方政府债券发行和债务余额情况 一、全国地方政府债券发行情况 (一)当月发行情况。 2...
JFX-A型精子质量分析仪空气... JFX-A型精子质量分析仪空气减震器:为精准医疗保驾护航行 在现代医疗技术中,精子质量分析仪是评估男...
“王健林卖万达广场”话题连续4... "先定个小目标"的王健林,如今却像清仓特卖般疯狂甩卖手里近1/5的万达广场,背后暗藏什么玄机? 短...
AI概念股早盘走弱,人工智能相... AI概念股早盘走弱,中科星图跌超8%,芯原股份、寒武纪-U、光环新网跌超3%。 受盘面影响,人工智能...
原创 稀... 近期,据美国《纽约时报》援引匿名知情人士的话报道称,美国商务部已暂停部分允许美国公司向中国商用飞机有...
一线城市豪宅市场火爆:500亿... “日光盘”接连上演,上海楼市持续高温。 5月27日,上海共有7个楼盘集中入市,其中3个项目实现“日光...
信泰人寿合规之殇:国资入局能否... 信泰人寿从民企转为国企,过程布满荆棘。自2007年成立以来,经历了股东内斗、偿付能力危机、高管贪腐、...
傲农生物“脱险”后,何时恢复盈... 得益于2024年财报的向好表现,福建傲农生物科技集团股份有限公司(简称“傲农生物”)近日被撤销退市风...
Java:分布式RPC框架Ap... 目录一、软件架构的演进过程【了解】二、Dubbo概述【了解】1、Dubbo简介2、Dubb架构三、服...
长肥网络与TCP的长肥管道 本文目录1、简化的理解网络模型2、时延带宽积的定义3、长肥网络与TCP长肥管道的定义4、TCP长肥管...
从NLP视角看电视剧《狂飙》,... 文章目录1、背景2、数据获取3、文本分析与可视化3.1 短评数据预处理3.2 词云图可视化3.3 t...
下一个万亿级蓝海市场,数字能源... 随着全球碳中和共识的形成、能源转型的推进,数字能源作为新一代能源技术的重要组成部分,成为各国政府和企...
【CSS】P9 选择器优先级 选择器优先级抛出一个问题选择器优先级权重!important外部样式与内部样式冲突 抛出一个问题 ...
孙悟空为何成了完美男友? 孙悟空成为完美男友,实乃其独特特质所致。他神通广大,能在女友遇到危险时瞬间现身,如那盖世英雄,给予最...
深市同标的规模最大的证券ETF... 5月30日,A股早盘震荡走低,券商板块回调。相关ETF中,证券ETF(159841)截至发稿跌0.7...
中建投信托地产风险化解仍需时日... 中建投信托仍然被“地产旧伤"拖累。文/每日财报 汇水在信托行业深度转型的2024年,年报数据清晰反...
RTP载荷H265(实战细节) H264与H265协议详解RTP载荷H264(实战细节) RTP载荷H2...
【2023.3.8】数据结构复... 【2023.3.8】数据结构复习笔记 文章目录【2023.3.8】数据结构复习笔记序言一、绪论二、线...
赛力斯应邀出席东盟重要经济论坛... 近年来,伴随着中国汽车产业的全面国际化,中国车企的全球影响力日益提升,就在最近赛力斯被应邀出席东盟-...
聚集更有国际化潜力研发管线 君... 5月29日,上海君实生物医药科技股份有限公司(简称“君实生物”)发布关于部分募投项目子项目变更及金额...
面经-2023-哲库Zeku-... 专栏推荐:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 专栏首页:2023 数字IC...