前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从青铜到黄金,对着mysql学,一文搞定mongoDB

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

作者头像
香菜聊游戏
发布2021-09-08 15:10:05
7590
发布2021-09-08 15:10:05
举报
文章被收录于专栏:香菜聊游戏

Mongodb基础入门教程

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

1、mongo 和 mysql 概念 对比

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

2、插入文档

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

例子

代码语言:javascript
复制
db.col.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

以上实例中 col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档

3、更新文档

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

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

语法:

代码语言:javascript
复制
db.getCollection('test_data_1').updateMany(
// 下面是查询条件     
{"字段名1":"查找条件1","字段名2":"查找条件2"},
// 进行修改
{"$set":{"字段名":"新的数据","字段名":"新的数据"} 
})
  • updateOne:只更新第一条符合条件的数据
  • updateMany:更新所有符合条件的数据

4、删除文档

例子:

代码语言:javascript
复制
db.getCollection('test_data_1').deleteMany(
// 删除的条件
{"字段名1":"值","字段名2":"值2"}
)

deleteOnedeleteMany。和修改数据的情况差不多,一个是删除第一条满足条件的,一个是删除所有满足条件的。

5、查询

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

代码语言:javascript
复制
db.collection.find(query, projection)
  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

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

代码语言:javascript
复制
db.col.find({"by":"香菜聊游戏", "title":"MongoDB 教程"})

等价于:WHERE by='香菜聊游戏' AND title='MongoDB 教程'

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

代码语言:javascript
复制
db.col.find({$or:[{"by":"香菜聊游戏"},{"title": "MongoDB 教程"}]})

等价于:WHERE by='香菜聊游戏' or title='MongoDB 教程'

6、查询排序

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

例子 :

代码语言:javascript
复制
db.col.find({},{"title":1,_id:0}).sort({"likes":-1})
  • 得到数据的条数
代码语言:javascript
复制
db.getCollection('test_data_1').find({}).count()

7、索引:

单个索引

代码语言:javascript
复制
db.col.createIndex({"title":1})

Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1

复合索引:

代码语言:javascript
复制
db.col.createIndex({"title":1,"description":-1})

8、限制数量

代码语言:javascript
复制
db.col.find({},{"title":1,_id:0}).limit(2)

除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

代码语言:javascript
复制
db.col.find({},{"title":1,_id:0}).limit(1).skip(1)

9、去重

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

代码语言:javascript
复制
db.getCollection('test_data_1').distinct(去重的字段名,去重的条件)
代码语言:javascript
复制
db.getCollection('test_data_1').distinct("name",{"age":{"$ne":10}})

最佳实践

  1. 集合名全部小写
  2. 禁止使用数字打头的库名
  3. 文档中的 key 禁止使用任何 " _ "(下划线)以外的特殊字符
  4. 尽量存放统一了大小写后的数据
  5. 在创建集合时,规划好索引,在集合为空的时候创建索引
  6. 索引的数量越少越好,
  7. mongo不支持表连接
  8. 设定合适的MongoDB连接池大小,Java驱动的默认连接池大小是100
  9. 不要实例化多个MongoClient。MongoClient是个线程安全的类,自带线程池。通常在一个JVM内不要实例化多个MongoClient实例,避免连接数过多和资源的不必要浪费
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 香菜聊游戏 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mongodb基础入门教程
    • 最佳实践
    相关产品与服务
    云数据库 MongoDB
    腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档