专栏首页香菜聊游戏从青铜到黄金,对着mysql学,一文搞定mongoDB

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

Mongodb基础入门教程

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

1、mongo 和 mysql 概念 对比

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

2、插入文档

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

例子

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 主键存在就更新,不存在就插入

语法:

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

4、删除文档

例子:

db.getCollection('test_data_1').deleteMany(
// 删除的条件
{"字段名1":"值","字段名2":"值2"}
)

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

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、查询排序

在 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}})

最佳实践

  1. 集合名全部小写
  2. 禁止使用数字打头的库名
  3. 文档中的 key 禁止使用任何 " _ "(下划线)以外的特殊字符
  4. 尽量存放统一了大小写后的数据
  5. 在创建集合时,规划好索引,在集合为空的时候创建索引
  6. 索引的数量越少越好,
  7. mongo不支持表连接
  8. 设定合适的MongoDB连接池大小,Java驱动的默认连接池大小是100
  9. 不要实例化多个MongoClient。MongoClient是个线程安全的类,自带线程池。通常在一个JVM内不要实例化多个MongoClient实例,避免连接数过多和资源的不必要浪费

本文分享自微信公众号 - 香菜聊游戏(gamWatcher),作者:香菜聊游戏

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 转行程序员能干嘛?

    2. 可以做一个自由职业开发者,做个网站,开发个app,能不能捞金就看个人了,反正B是装完了。

    王炸
  • 超详细数据图解:哪些中国AI公司,正“削尖脑袋”挤进学术圈

    量子位 | 李林 舒石 发自 中国硅谷 2017年的第一场人工智能顶级学术会议,比往年来得更早一些。 半个地球之外的旧金山,AAAI-17大会正在上演。人们通常...

    量子位
  • 冶铁技术与古巴比伦的灭亡:科技进展可能对人类文明产生多大影响

    大数据文摘
  • USACO美国信息学奥赛第一场月赛(2019-12)正在进行中

    2019-2020美国信息学奥赛第一场月赛的比赛时间为美国时间2019年12月13 日8:00~2019年12月16日23:59(北京时间为2019年12月13...

    海天一树
  • 腾讯云学院直播课丨云数据库之从青铜到王者

    4月10日,腾讯云学院邀请到了讲师刘迪,进行了一场直播课,课程主题是:云数据库之从青铜到王者。整个直播课精彩纷呈,广受好评。

    云加社区
  • 90年代自学C,独立研发中文编辑器和输入法,被称小说圈中的Geek,你一定不知道这样的王小波!

    早在90年代初,王小波就接触了计算机。1988年,他毕业于美国匹兹堡大学东亚研究中心,获硕士学位,那时就知道Macintosh,玩过IBMPS/2。

    养码场
  • 适合 Java 新手的开源项目集合——在 GitHub 学编程

    当今互联网份额最大的编程语言是哪一个?是 Java!这两年一直有听说 Java 要不行了、在走下坡路了。没错,Java 的确在走下坡路,未来的事情的确不好说,但...

    HelloGitHub
  • Spring Boot 项目总是创建失败,这几个备选方案一定要收藏

    松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程

    江南一点雨
  • Redis 分布式锁|从青铜到钻石的五种演进方案

    上篇我们讲到如何用本地内存做缓存来增强系统的性能,另外探讨了加锁解决缓存击穿的问题。但是本地加锁的方式在分布式的场景下就不适用了,所以本文我们来探讨下如何引入分...

    悟空聊架构
  • 理才网入选中国B2B百强:头部效应 驱动未来 | 腾讯SaaS加速器·学员动态

    ? 来源 | 腾讯SaaS加速器首期项目-理才网 ---- ? 12月27日,第三届·中国浙江舟山群岛新区全球海洋经济创业大赛总决赛在朱家尖举行。经过多轮...

    腾讯SaaS加速器
  • 【直播预告】揭秘MySQL的数据类型

    点击上方蓝字每天学习数据库 ---- 【直播课程】由腾讯云数据库产品团队的主要技术负责人、中国计算机行业协会开源数据库专业委员会副会长刘迪(迪B哥)担任讲师,...

    腾讯云数据库 TencentDB
  • 大数据和云计算技术周报(第134期)

    本文主要对Spark读取HBase Snapshort表进行了相关优化,剖析了部分源码,对部分源码进行了重写与改造,最终实现了HBase表的高效率读

    大数据和云计算技术
  • 设计模式之策略模式

    策略模式(Strategy Pattern)隶属于设计模式中的行为型模式,是日常开发中使用最广的一个模式,相对于其他模式,自认为这个模式是最容易理解和使用的。

    Dylan Liu
  • T派校园公开课西安电子科技大学站,与你相约4月9日!

    互联网、移动互联网、物联网,行业如何?模式如何? 腾讯如何借助开放、精品战略实现连接一切的可能? 西电互联网创业氛围到底如何青春澎湃? 创意展示、技术实现、...

    腾讯高校合作
  • Python实现天气查询功能(外加Excel技巧)

    昨天在网上发现了一个非常方便的天气API,就用Python试着用了一下。参数是挺少的,用起来也方便,但是那个城市代码确实是搞了我好长时间。

    ZackSock
  • 从最简单的斐波那契数列来学习动态规划

    斐波那契数列是一个很经典的问题,虽然它很简单,但是在优化求解它的时候可以延伸出很多实用的优化算法。

    ssh_晨曦时梦见兮
  • 腾讯云与MongoDB达成战略合作,为全球用户提供最新MongoDB服务

    腾讯云数据库又搞大事了! 这次,我们和MongoDB联名了,准确说,是腾讯云数据库和全球领先的现代通用型数据库平台MongoDB正式达成了战略合作。 Mong...

    腾讯云数据库 TencentDB
  • 即将开源的新一代MySQL高可用组件:MySQL Plus

    在基于MySQL传统复制的时代(MySQL版本低于5.5),MHA在MySQL高可用中可以说是独领风骚。

    田帅萌
  • 大国伪创新下的“酒池肉林”

    到现在为止,技术创新还从未出现在中国大多数企业的考虑范畴之内,创新的肉体都还没找着,就更别提创新的灵魂了,顶多有个外壳,上写“创新”二字,敲开后,仍是那堆破铜烂...

    钱塘数据

扫码关注云+社区

领取腾讯云代金券