从青铜到黄金,对着mysql学,一文搞定mongoDB

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 MongoDB,通用型 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mongodb基础入门教程 项目中使用的技术五花八门,接触了很多新技术,之前也没用过mongo,今天恶补一下基础的知识,开始吧。

Mongodb基础入门教程 项目中使用的技术五花八门,接触了很多新技术,之前也没用过mongo,今天恶补一下基础的知识,开始吧。


1、mongo 和 mysql 概念 对比


一个刚毕业的学生都知道mysql ,所以说关系型数据库就像我们的母语一样,在学习新的数据库的时候进行知识迁移,先来类比一下mysql 的概念。

fa1fc3cbc79c480c85b14a5d99d866a6~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg2、插入文档


MongoDB 使用 insert() 或 save() 方法向集合中插入文档


例子


db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: '菜鸟教程', url: 'www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }) 以上实例中 col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。


3、更新文档


update() 方法用于更新已存在的文档


save() 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入


语法:


db.getCollection('test_data_1').updateMany( // 下面是查询条件


{"字段名1":"查找条件1","字段名2":"查找条件2"}, // 进行修改 {"$set":{"字段名":"新的数据","字段名":"新的数据"} })

updateOne:只更新第一条符合条件的数据


updateMany:更新所有符合条件的数据


4、删除文档


例子:


db.getCollection('test_data_1').deleteMany( // 删除的条件 {"字段名1":"值","字段名2":"值2"} ) deleteOne和deleteMany。和修改数据的情况差不多,一个是删除第一条满足条件的,一个是删除所有满足条件的。


5、查询


图片


MongoDB 查询数据的语法格式如下:


db.collection.find(query, projection) query :可选,使用查询操作符指定查询条件


projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。


MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件


db.col.find({"by":"香菜聊游戏", "title":"MongoDB 教程"}) 等价于:WHERE by='香菜聊游戏' AND title='MongoDB 教程'

MongoDB OR 条件语句使用了关键字 $or


db.col.find({$or:[{"by":"香菜聊游戏"},{"title": "MongoDB 教程"}]}) 等价于:WHERE by='香菜聊游戏' or title='MongoDB 教程'


6、查询排序

2e3ed7f0fc1d4e1bba52dd08d7f78a8c~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。


例子 :


db.col.find({},{"title":1,_id:0}).sort({"likes":-1}) 得到数据的条数


db.getCollection('test_data_1').find({}).count() 7、索引:


单个索引


db.col.createIndex({"title":1}) Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1


复合索引:


db.col.createIndex({"title":1,"description":-1}) 8、限制数量


db.col.find({},{"title":1,_id:0}).limit(2) 除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。


db.col.find({},{"title":1,_id:0}).limit(1).skip(1) 9、去重


在mongodb中进行数据去重是一个很简单的操作。使用distinct即可。它可以接收两个参数,第一个参数为需要被去重的字段名,第二个参数是进行去重的条件(去重条件也就是进行查询操作的第一个参数,可以省略)。


db.getCollection('test_data_1').distinct(去重的字段名,去重的条件) db.getCollection('test_data_1').distinct("name",{"age":{"$ne":10}}) 最佳实践 集合名全部小写


禁止使用数字打头的库名


文档中的 key 禁止使用任何 " _ "(下划线)以外的特殊字符


尽量存放统一了大小写后的数据


在创建集合时,规划好索引,在集合为空的时候创建索引


索引的数量越少越好,


mongo不支持表连接


设定合适的MongoDB连接池大小,Java驱动的默认连接池大小是100


不要实例化多个MongoClient。MongoClient是个线程安全的类,自带线程池。通常在一个JVM内不要实例化多个MongoClient实例,避免连接数过多和资源的不必要浪费

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
4天前
|
NoSQL 关系型数据库 MySQL
什么时候使用MongoDB而不是MySql
MongoDB与MySQL对比:MongoDB适合非结构化数据、高并发读写、地理空间数据处理、实时分析和嵌入式应用,因其面向文档、高扩展性和地理空间索引功能。而MySQL在结构化数据、事务处理和严格一致性场景下更具优势。选择取决于具体需求。
90 7
|
4天前
|
NoSQL 关系型数据库 MySQL
mongodb和mysql扫盲
mongodb和mysql扫盲
|
3天前
|
DataWorks NoSQL 关系型数据库
DataWorks操作报错合集之在使用 DataWorks 进行 MongoDB 同步时遇到了连通性测试失败,实例配置和 MongoDB 白名单配置均正确,且同 VPC 下 MySQL 可以成功连接并同步,但 MongoDB 却无法完成同样的操作如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
34 1
|
4天前
|
NoSQL 应用服务中间件 Linux
CentOS7搭建MySQL+Redis+MongoDB+FastDF
CentOS7搭建MySQL+Redis+MongoDB+FastDF
145 0
|
4天前
|
NoSQL 关系型数据库 MySQL
Windows、Linux、Mac安装数据库(mysql、MongoDB、Redis)#0
不同系统下进行MySQL安装、MongoDB安装、Redis安装【2月更文挑战第5天】
449 5
Windows、Linux、Mac安装数据库(mysql、MongoDB、Redis)#0
|
4天前
|
NoSQL 关系型数据库 MySQL
实习里项目使用mysql、mongodb、redis都用来干什么
实习里项目使用mysql、mongodb、redis都用来干什么
51 0
|
4天前
|
NoSQL 关系型数据库 应用服务中间件
Linux安装 OpenResty、Nginx、PHP、Mysql、Redis、Lua、Node、Golang、MongoDB、Kafka等
Linux安装 OpenResty、Nginx、PHP、Mysql、Redis、Lua、Node、Golang、MongoDB、Kafka等
94 0
|
4天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
24 0
|
3天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
12 0
|
3天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(上)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
18 0