赶紧收藏起MongoDB面试题轻松面对BAT灵魂式的拷问(上)

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介: MongoDB是基于分布式文件存储的数据库,由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案,且MongodDB是一个介于关系数据库与非关系数据库之间的产品,是非关系型数据库中功能最丰富,最像关系数据库。

MongoDB是基于分布式文件存储的数据库,由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案,且MongodDB是一个介于关系数据库与非关系数据库之间的产品,是非关系型数据库中功能最丰富,最像关系数据库。


由于MongoDB的特性以及功能,使得其在企业使用频率很大,所以很多面试都会MongoDB的相关知识,基于网上以及自己阅读官网文档总结2019-2020年MongoDB的面试题。具体如下:


1Q:MongoDB的优势有哪些?


  • 面向集合(Collection)和文档(document)的存储,以JSON格式的文档保存数据。
  • 高性能,支持Document中嵌入Document减少了数据库系统上的I/O操作以及具有完整的索引支持,支持快速查询
  • 高效的传统存储方式:支持二进制数据及大型对象
  • 高可用性,数据复制集,MongoDB 数据库支持服务器之间的数据复制来提供自动故障转移(automatic failover
  • 高可扩展性,分片(sharding)将数据分布在多个数据中心,MongoDB支持基于分片键创建数据区域.
  • 丰富的查询功能, 聚合管道(Aggregation Pipeline)、全文搜索(Text Search)以及地理空间查询(Geospatial Queries)
  • 支持多个存储引擎,WiredTiger存储引、In-Memory存储引擎


2Q:MongoDB 支持哪些数据类型?


java类似数据类型:


类型 解析
String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的
Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位
Double 双精度浮点值。用于存储浮点值
Boolean 布尔值。用于存储布尔值(真/假)
Arrays 用于将数组或列表或多个值存储为一个键
Datetime 记录文档修改或添加的具体时间


MongoDB特有数据类型:


类型 解析
ObjectId 用于存储文档 id,ObjectId是基于分布式主键的实现MongoDB分片也可继续使用
Min/Max Keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比
Code 用于在文档中存储 JavaScript代码
Regular Expression 用于在文档中存储正则表达式
Binary Data 二进制数据。用于存储二进制数据
Null 用于创建空值
Object 用于内嵌文档


3Q:什么是集合Collection、文档Document,以及与关系型数据库术语类比。


  • 集合Collection位于单独的一个数据库MongoDB 文档Document集合,它类似关系型数据库(RDBMS)中的表Table。一个集合Collection内的多个文档Document可以有多个不同的字段。通常情况下,集合Collection中的文档Document有着相同含义。
  • 文档Document由key-value构成。文档Document是动态模式,这说明同一集合里的文档不需要有相同的字段和结构。类似于关系型数据库中table中的每一条记录。
  • 与关系型数据库术语类比


mongodb 关系型数据库
Database Database
Collection Table
Document Record/Row
Filed Column
Embedded Documents Table join


4Q:什么是”Mongod“,以及MongoDB命令。


mongod是处理MongoDB系统的主要进程。它处理数据请求,管理数据存储,和执行后台管理操作。当我们运行mongod命令意味着正在启动MongoDB进程,并且在后台运行。


MongoDB命令:


命令 说明
use database_name 切换数据库
db.myCollection.find().pretty() 格式化打印结果
db.getCollection(collectionName).find() 修改Collection名称


5Q:"Mongod"默认参数有?


  • 传递数据库存储路径,默认是"/data/db"
  • 端口号 默认是 "27017"


6Q:MySQLmongodb的区别


形式 MongoDB MySQL
数据库模型 非关系型 关系型
存储方式 虚拟内存+持久化
查询语句 独特的MongoDB查询方式 传统SQL语句
架构特点 副本集以及分片 常见单点、M-S、MHA、MMM等架构方式
数据处理方式 基于内存,将热数据存在物理内存中,从而达到高速读写 不同的引擎拥有自己的特点
使用场景 事件的记录,内容管理或者博客平台等数据大且非结构化数据的场景 适用于数据量少且很多结构化数据


7Q:问mongodbredis区别以及选择原因


形式 MongoDB redis
内存管理机制 MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘 Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据
支持的数据结构 MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引 Redis 支持的数据结构丰富,包括hash、set、list等
性能 mongodb依赖内存,TPS较高 Redis依赖内存,TPS非常高。性能上Redis优于MongoDB
可靠性 支持持久化以及复制集增加可靠性 Redis依赖快照进行持久化;AOF增强可靠性;增强可靠性的同时,影响访问性能
数据分析 mongodb内置数据分析功能(mapreduce) Redis不支持
事务支持情况 只支持单文档事务,需要复杂事务支持的场景暂时不适合 Redis 事务支持比较弱,只能保证事务中的每个操作连续执行
集群 MongoDB 集群技术比较成熟 Redis从3.0开始支持集群


选择原因:


  • 架构简单
  • 没有复杂的连接
  • 深度查询能力,MongoDB支持动态查询。
  • 容易调试
  • 容易扩展
  • 不需要转化/映射应用对象到数据库对象
  • 使用内部内存作为存储工作区,以便更快的存取数据。


8Q:如何执行事务/加锁?


mongodb没有使用传统的锁或者复杂的带回滚的事务,因为它设计的宗旨是轻量,快速以及可预计的高性能.可以把它类比成mysql mylsam的自动提交模式.通过精简对事务的支持,性能得到了提升,特别是在一个可能会穿过多个服务器的系统里.


9Q:更新操作会立刻fsync到磁盘?


不会,磁盘写操作默认是延迟执行的.写操作可能在两三秒(默认在60秒内)后到达磁盘,通过 syncPeriodSecs 启动参数,可以进行配置.例如,如果一秒内数据库收到一千个对一个对象递增的操作,仅刷新磁盘一次.


MongoDB索引


10Q: 索引类型有哪些?


  • 单字段索引(Single Field Indexes)
  • 复合索引(Compound Indexes)
  • 多键索引(Multikey Indexes)
  • 全文索引(text Indexes)
  • Hash 索引(Hash Indexes)
  • 通配符索引(Wildcard Index)
  • 2dsphere索引(2dsphere Indexes)


11Q:MongoDB在A:{B,C}上建立索引,查询A:{B,C}和A:{C,B}都会使用索引吗?


由于MongoDB索引使用B-tree树原理,只会在A:{B,C}上使用索引


MongoDB索引详情可看文章MongoDB系列--轻松应对面试中遇到的MongonDB索引(index)问题其中包括很多索引的问题:


  • 创建索引,需要考虑的问题
  • 索引限制问题
  • 索引类型详细解析
  • 索引的种类问题


12Q:什么是聚合


聚合操作能够处理数据记录并返回计算结果。聚合操作能将多个文档中的值组合起来,对成组数据执行各种操作,返回单一的结果。它相当于 SQL 中的 count(*) 组合 group by。对于 MongoDB 中的聚合操作,应该使用aggregate()方法。


详情可查看文章MongoDB系列--深入理解MongoDB聚合(Aggregation)其中包括很多聚合的问题:


  • 聚合管道(aggregation pipeline)的问题
  • Aggregation Pipeline 优化等问题
  • Map-Reduce函数的问题


相关实践学习
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
目录
相关文章
|
1月前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
454 9
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
1月前
|
存储 NoSQL 关系型数据库
MongoDB面试题
MongoDB面试题
|
1月前
|
NoSQL 应用服务中间件 MongoDB
2023年底复盘之大厂必问面试题:Redis+MongoDB+ZK+Nginx+数据库
今天分享给大家的都是目前主流企业使用最高频的面试题库,也都是 Java 版本升级之后,重新整理归纳的最新答案,会让面试者少走很多不必要的弯路。同时每个专题都做到了详尽的面试解析文档,以确保每个阶段的读者都能看得懂,同时这部分面试文档也是可以免费的提供给有需要的同学们学习的,有需要的可以查看文末的获取方式!
|
11月前
java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
483 0
|
11月前
java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
610 0
|
11月前
java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
712 0
|
11月前
|
存储 SQL NoSQL
【Java面试八股文宝典之MongoDB篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day18
【Java面试八股文宝典之MongoDB篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day18
137 0
【Java面试八股文宝典之MongoDB篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day18
|
存储 消息中间件 缓存
【Java面试】缓存为什么用Redis而不用MongoDB呢?
分享一道面试题,问出这种问题,我觉得实在是也没什么意思。 但是今天还是稍微来分析一下,毕竟总会有人问 1 加 1 为什么等于 2。 首先,我们来想一下,既然是用来做缓存,必须要符合哪些特征呢?
204 0
|
存储 JSON 分布式计算
JAVA面试——MongoDB
JAVA面试——MongoDB
257 0
JAVA面试——MongoDB
|
NoSQL 关系型数据库 MySQL
年底复盘之大厂必问面试题:Redis+MongoDB+ZK+Nginx+数据库
今天分享给大家的都是目前主流企业使用最高频的面试题库,也都是 Java 版本升级之后,重新整理归纳的最新答案,会让面试者少走很多不必要的弯路。同时每个专题都做到了详尽的面试解析文档,以确保每个阶段的读者都能看得懂,同时这部分面试文档也是可以免费的提供给有需要的同学们学习的,有需要的可以查看文末的获取方式!