MongoDB 是 10gen 软件在 2007 年创建的基于文档的数据库。它适用于集合和文档的概念。MongoDB 服务器可以包含多个数据库,并提供高性能、冗余和易于扩展。MongoDB 中的集合可以被认为是一组可以具有不同类型字段的文档。文档是一组具有动态模式的键值对,即公共字段可能包含不同类型的数据,并且同一集合中的所有文档不必具有相同的结构。如果你是 MongoDB 的新手,但以前使用过像 SQL 这样的 RDBMS,这个小表将帮助你关联术语:
关系型数据库管理系统 | MongoDB |
表 | 集合 |
行 | 文档 |
列 | 属性 |
表连接 | 嵌入文件 |
MongoDB 的一些突出特点是——
- 跨平台
- 用 C++ 编写。
- 安全且可扩展
- 无模式数据库
- 面向文档
- 支持高可用性和冗余
顶级MongoDB面试题和答案合集
在这里你可以开始你的
问题:Mongo shell 是什么?
MongoDB面试题解析: Mongo shell 是 MongoDB 的 JavaScript 接口,可用于查询和更新数据。它是交互式的,也可用于执行管理操作。
问题:MongoDB如何存储数据?
答:基于文档,MongoDB 以 BSON 或二进制 JavaScript 对象表示法存储文档,这是 JSON 的二进制编码格式。
问题:MongoDB 是什么类型的 NoSQL 数据库?
答:它是一个文档数据库,包含具有键值对、键数组对和嵌套文档的文档。
问题:MongoDB常见面试题有哪些 - 列出MongoDB的重要特性。
答: MongoDB 的重要特性是——
- 它是一个无模式的数据库
- 没有复杂的连接
- 由于工作集(内部存储器)的存在,可以更快地访问数据
- 聚合、分片和复制等功能使其易于使用。
- 跨平台和基于文档
- 自动故障转移和高可用性
问题:MongoDB 中有哪些数据模型?
答:数据建模取决于文档的结构。在 MongoDB 中,
- 相关数据可以嵌入到单个文档结构中(Embedded data model)
- 通过从一个文档到另一个文档的引用,存储数据之间的关系(规范化数据模型)
问题:MongoDB 被称为无模式数据库。这是真的吗?如何在 MongoDB 中创建模式?
答:更恰当的说法是 MongoDB 具有动态类型模式,因为它依赖于 JSON,而 JSON 是一种无模式数据结构。要创建架构,请创建并插入文档。插入文档后,将在数据库中创建相应的集合。
问题:MongoDB 中的命名空间是什么?
答:命名空间是数据库名称和集合名称的串联。示例——students.the subject,其中students 是数据库,而subject 是集合。
问题:在MongoDB中如何进行CRUD操作?
回答:
- C – 创建 – db.collection.insert();
- R - 读取 - db.collection.find();
- U - 更新 - db.collection.update();
- D – 删除 – db.collection.remove({“fieldname”: “value”});
问题:MongoDB常见面试题合集:MySQL 和 MongoDB 有什么区别?
回答:
MySQL | MongoDB |
用 C 和 C++ 编写 | 用 C++ 和 JavaScript 编写 |
遵循 RDBMS 数据库结构 | 基于文档的结构 |
垂直缩放 | 水平缩放 |
严格定义的数据结构,模式是严格的,应该在开始时定义。 | 复杂文档的动态和灵活模式创建。 |
使用结构化查询语言 | 使用非结构化查询语言。 |
使用 Join 链接来自两个或多个表的数据 | JOIN 没有等价物。 |
具有非结构化数据的大型数据库的性能很慢。 | 有效处理大型非结构化数据,从而提供良好的性能。 |
不太适合基于云的环境 | 基于云的服务的最佳选择。 |
问题:在 MongoDB 中如何管理约束?
MongoDB面试题解析:你可以从 MongoDB 3.2 开始在集合上添加文档验证器。也可以使用 db.collection.createIndex({“key” : 1} , ); 创建唯一索引。
问题:什么是ObjectId?它的结构如何?
答: ObjectId 是一个类,它是 MongoDB 中文档的默认主键。它位于插入文档的 _id 字段中。它是使用默认算法生成的 12 字节 BSON 类型。结构是——
- 一个 4 字节的值,表示自 Unix 纪元以来的秒数
- 3 字节机器 ID
- 2 字节进程 ID
- 以随机数开头的 3 字节计数器
问题:什么是BSON?
MongoDB常见面试题有哪些:答: BSON 或二进制 JSON 是 JSON 的二进制编码格式。它扩展了 JSON 并提供了更多的数据类型和字段。
问题:MongoDB 是如何做索引的?
答:索引是使用 ensureIndex() 方法完成的。句法 -
db.COLLECTION_NAME.ensureIndex()
问题:命名为新集合创建的默认索引。
答:为新集合创建的默认索引是 _id
问题:MongoDB 中的分片是什么?
答: MongoDB 使用 Sharding 来满足数据增长,这意味着在不同的机器上对数据记录进行排序。每个分片都是一个副本集。
问题:什么是涵盖查询,为什么它很重要?
答:在覆盖查询中,查询中使用的所有字段都创建了索引。返回的结果也应该是索引的一部分。因此,MongoDB 无需实际查看内部文档即可获取结果,从而节省时间并提高效率。
问题:什么是复制,什么是主副本集和辅助副本集?
答:复制意味着跨多台服务器同步数据。它增加了数据的可用性。如果单个服务器丢失,其他服务器中的数据仍然完好无损。
- 主副本集 - MongoDB 仅将数据写入主副本集或主副本集。
- 次要副本集——次要或从节点只能接受读取。他们从主复制。
问题:使用 MongoDB 命名 2 个存储引擎?
答: MMAPv1 和 WiredTiger 是 MongoDB 使用的 2 个存储引擎。
问题:如何在 MongoDB 中创建和删除集合?
回答:
- 创建集合 - db.createCollection();
- 删除集合 – db.collection.drop();
问题:什么是日记,它是如何工作的?
答: MongoDB 通过使用为每次写入创建的磁盘日志来确保数据完整性。在服务器崩溃的情况下,日志可用于跟踪未写入磁盘或数据文件的写入。
问题:如何在MongoDB中存储图片、视频等大文件?
答:大文件使用 GridFS 规范存储在 MongoDB 中。
问题:比较 CouchDB 和 MongoDB。
回答:
CouchDB | MongoDB |
数据模型是面向文档的,即 JSON | 使用 BSON,它是 JSON 的扩展 |
使用 HTTP/REST 进行查询 | 使用 TCP/IP 上的标准协议 |
数据库有文件 | 数据库包含集合,集合包含文档 |
用 Erlang 写的 | 用 C++ 编写 |
使用范围查询和 map/reduce | 使用基于对象的查询语言和 map/reduce |
问题:MongoDB 在哪些方面优于 MySQL?解释。
答: MongoDB 有一个灵活的数据模型,可以根据业务需求扩展模式。此外,MongoDB 速度更快,可以处理更多数据类型以更好地管理实时应用程序。
问题:MongoDB 中有哪些不同的索引类型?
回答:
- 默认 - 这是 MongoDB 创建的 _id
- 单字段 - 用于对单个字段进行索引和排序
- 复合 – 适用于多个领域
- 多键——用于索引数组数据
- Hashed – 索引字段值的哈希值
- 地理空间 – 查询地理空间(位置)数据
问题:什么是 ACID 事务?MongoDB 支持吗?
答: ACID 代表原子性、一致性、隔离性和持久性。事务管理器确保处理这些属性。是的,MongoDB 4.0 版支持 ACID。
问题:解释分析器在 MongoDB 中的作用。
答:探查器是一种内置工具,可以找出缓慢且资源密集型的查询,并提供查询级别的见解。作为 dba,你可以分析查询。Profiler 将所有数据存储在 system.profile 集合中。
问题:MongoDB 如何处理事务和锁?
MongoDB面试题解析: MongoDB 使用多粒度锁定,其中可以在全局、数据库或集合级别锁定操作。由存储引擎来实现并发级别。例如,在 WiredTiger 中,它是文档级别的。对于读,有一种共享锁定模式,而对于写,有一种独占锁定模式。
问题:列出集合中所有索引的命令是什么?
答:命令是db.collection.getIndexes();
问题:MongoDB 是如何做文本搜索的?
答:可以使用文本索引进行文本搜索。例子 -
db.collection_name.ensureIndex();
问题:将更新写入磁盘的默认间隔是多少?
答:默认间隔为 60 秒。
问题:解释 MongoDB 中的聚合。
答:MongoDB常见面试题合集 - 聚合对来自不同文档的值进行分组并对数据执行操作以返回单个结果。MongoDB 执行聚合的方式有 3 种:
- 聚合管道
- Map-reduce 功能
- 单一目的聚合方法
问题:说明 find() 和 limit() 方法之间的区别。
答案: MongoDB常见面试题有哪些 - find() – 仅显示选定的数据,而不是文档的所有数据。例如,如果你的文档有 4 个字段,但你只想显示一个,请将必填字段设置为 1,其他字段设置为 0。
db.COLLECTION_NAME.find({},);
limit() – 限制函数限制获取的记录数。例如,如果你有 7 个文档,但只想显示集合中的前 4 个文档,请使用 limit。句法 -
db.COLLECTION_NAME.find().limit(NUMBER);
问题:并发如何影响主副本集?
答:当集合更改写入主数据库时,MongoDB 会将相同的内容写入本地数据库中的一个特殊集合,称为主数据库的 oplog。因此,集合的数据库和本地数据库都被锁定。
问题:举一个MongoDB中插入、删除和更新语句的例子。
插入 | db.books.insert({ _id: ObjectId(7df74fd8902c), title: 'All about MongoDB', description: 'Everything you need to know about MongoDB', by: 'Author1', url: 'http://www.blogsuthor1.com' }) |
删除 | 删除特定文件 -db.books。db.books.remove({'title':'All about MongoDB'}) 删除所有文件 - db.books.remove(); |
更新 | 要更新现有文档的值 - db.books.update({'title':'All about MongoDB'},{$set:{'title':'MongoDB for dummies'}}) 使用基于 ObjectId的新文档替换现有文档- db.books.save( { "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB for dummies", "by":"Author2" } ) |
问题:什么有上限的收藏?
答:上限集合是固定大小的集合,并根据插入顺序插入和检索数据。如果集合的空间已满,则最旧的记录将被集合中的新文档覆盖。
问题:解释一下 Mongo-DB 中 map-reduce 命令的用途。
答: Map-reduce 是一种执行聚合的方法。
- Map 函数发出指定的键值对。
- Reduce 函数组合键值对并返回聚合结果。
句法 -
db.collection.mapReduce(
function() {emit(key,value);},
function(key, values) {return aggregatedResult}, { out: collection }
</pre.
)
问题:列出MongoDB支持的一些数据类型。
答:一些数据类型是数字、字符串、数组、二进制数据、布尔值、日期、正则表达式、ObjectId 等……
问题:应用程序如何访问 MongoDB 中的实时数据变化?
答:应用程序可以使用 Change 流访问实时数据更改,它充当所有集合操作(如插入、删除和更新)的订阅者。
问题:创建数据备份和恢复数据的命令是什么?
答:使用命令 mongodump 创建备份。
使用命令 mongorestore [backup_path] 恢复数据。
问题:解释一下 MongoDB 和 Cassandra 的区别?
回答:
参数 | MongoDB | Cassandra |
数据结构 | 当没有清晰的数据结构时使用的最佳数据库,即数据是结构化和非结构化的混合。 | 适用于非结构化和结构化数据,尤其是当数据库预计会动态增长时。 |
数据模型 | 拥有丰富且富有表现力的数据模型,是面向数据的。任何数据结构都可以轻松表示。 | 具有表中行和列的传统模型。每列都是特定类型的,这使结构井井有条。 |
主节点数 | 集群中只有一个master节点,控制着很多slave节点。 | 集群中有很多master节点。 |
二级索引 | 索引任何属性都很容易,因为二级索引是一流的构造。 | 二级索引仅限于单列,灵活性较差。 |
可扩展性 | 写入从节点的数据,必须经过单个主节点,所以扩展性较差。 | 由于有许多主节点,因此数据存在于多个节点中。因此,可扩展性高。 |
聚合框架 | 内置聚合框架。 | 没有内置的聚合框架。 |
问题:MongoDB 能否支持外键约束?
答:不,MongoDB 不支持外键约束。由于文档结构,MongoDB 提供了灵活的方式来定义关系。
问题:MongoDB 中的索引是什么?
答:在 MongoDB 中,索引有助于高效地执行查询。索引是特殊的数据结构,以易于遍历的形式存储部分集合。默认情况下,MongoDB 在创建集合时在 _id 字段上创建永久唯一索引。它可以防止数据库中的重复文档。
问题:MongoDB 中的存储引擎是什么?
答:它是数据库的一个组件,用于管理数据在内存和磁盘中的存储方式。MongoDB 提供对多个存储引擎的支持,有助于为不同的工作负载提供更好的性能。默认的存储引擎是 WiredTiger (MongoDB3.2),它非常适合大多数工作负载。
问题:解释一下MongoDB中Journaling工作的工作机制?
答:日志用于在MongoDB意外退出时在最后一个检查点之后恢复信息。存储引擎 (WiredTiger) 为启动写入操作的每个客户端创建日志记录。如果有更新,单个日志记录记录更新操作以及索引修改。日志记录使用内存缓冲存储。日志文件存储在 MongoDB 创建的“journal”目录下。阅读更多详情。
问:是否可以为 MMAPv1 配置缓存大小?
答:无法为 MMAPv1 配置缓存大小。MongoDB 通过内存映射文件自动使用所有空闲内存。
问题:解释MongoDB中的GridFS?
答: GridFS 存储和检索大文件,如图像、音频和视频文件等。虽然存储文件的限制是 16MB,但 GridFS 可以存储更大的文件。GridFS 将文件分成块并将每个块存储为最大大小为 255k 的不同文档。它使用两个集合 fs.chunks 和 fs.files 分别存储块和元数据。
问题:是否可以在一个 MongoDB 实例中运行多个 Javascript 操作?
答:是的,我们可以在一个 MongoDB 实例中运行多个 JS 操作。通过 mongo shell 实例,我们可以指定要在服务器上运行的 JavaScript 文件的名称。该文件可以包含任意数量的 JS 操作。
问题:MongoDB 是最好的 NoSQL 数据库吗?如何以及为什么?
答: MongoDB 是最适合用于数据分析和 Web 应用程序开发的 NoSQL 数据库。与需要专家分析数据的 Hadoop 不同,它可以帮助开发人员和数据科学家从存储的数据中获得洞察力。
MongoDB 允许高效的数据操作和管理功能。对多种 JavaScript 操作的支持和基于 Javascript 的 MEAN 堆栈增加了 MongoDB 的流行度。用于水平扩展和聚合框架的分片以构建管道使 MongoDB 快速高效,因此是最好的数据库。
问题:解释一下MongoDB中事务/锁定的过程?
MongoDB面试题解析: MongoDB 支持具有读写锁的多粒度锁定。
MongoDB 中可能有三种类型的锁定机制:
- 全局层面
- 数据库级别
- 收藏级别
实现还取决于单个存储引擎。有四种锁定模式:
- R(共享锁),
- W(独占锁),
- r(意图共享锁),
- w(意图排他锁)。
要了解更多信息,请访问官方文档页面。
问题:MongoDB常见面试题有哪些 - 解释一下 MongoDB 与 RDBMS 有何不同?
回答:
参数 | RDBMS | MongoDB |
定义 | 它是一个关系数据库管理系统。 | 它是一个非关系数据库。 |
在职的 | 处理使用行和列的表之间的关系。 | 使用文档和字段的面向文档的系统。 |
分层数据存储 | 难以存储分层数据。 | 用于存储分层数据的内置规定 |
可扩展性 | 垂直可扩展。 | 垂直和水平可扩展。 |
表现 | 性能随着 RAM 容量的增加而提高。 | 性能随着处理器的增加而增加。 |
架构 | 必须预先决定和设计模式,更改模式很困难。 | 模式的动态创建和管理使设计变得灵活。 |
支持连接 | 支持复杂的连接。 | 不支持连接。 |
查询语言 | 使用 SQL 查询数据库。 | BSON 用于数据库查询。 |
支持 Javascript | 不支持基于 JavaScript 的客户端查询数据库。 | 为基于 Javascript 的客户端提供查询数据库的功能。 |
问:说明启动MongoDB服务器/实例的过程?
答:MongoDB常见面试题合集 - 要启动MongoDB实例,请按照以下步骤操作:
- 首先,打开命令提示符并运行 mongod.exe。
- 或者,你可以移动到安装MongoDB的路径,例如“C:MongoDB”
- 导航到 bin 文件夹,找到 mongod.exe 并双击执行它。
- 你也可以导航到所需的文件夹,例如“C: MongoDB/bin”并键入 mongo 以通过 shell 连接 MongoDB。
问题:如何在语句中引用当前数据库?(通过使用数据库)
答:当前数据库称为“db”。示例 – db .collection.find();