MongoDB面试题问题以及参考答案

 

 

1.什么是MongoDB
MongoDB是一个文档数据库,提供好的性能,领先的非关系型数据库。采用BSON存储文档数据。2007年10月,MongoDB由10gen团队所发展。2009年2月首度推出。获得安装包和查看详细的API可以访问官网网址www.mongodb.com

2.MongoDB是由哪种语言写的
MongoDB用c++编写的,流行的开源数据库MySQL也是用C++开发的。C++1983年发行是一种使用广泛的计算机程序设计语言。它是一种通用程序设计语言,支持多重编程模式。关于C++的资料可以参考
https://zh.wikipedia.org/wiki/C%2B%2B​zh.wikipedia.org
3.MongoDB的优势有哪些
  • 面向文档的存储:以 JSON 格式的文档保存数据。任何属性都可以建立索引。复制以及高可扩展性。自动分片。丰富的查询功能。快速的即时更新。来自 MongoDB 的专业支持。

     

4.什么是数据库
数据库可以看成是一个电子化的文件柜,用户可以对文件中的数据运行新增、检索、更新、删除等操作。数据库是一个所有集合的容器,在文件系统中每一个数据库都有一个相关的物理文件。

5.什么是集合
集合就是一组 MongoDB 文档。它相当于关系型数据库(RDBMS)中的表这种概念。集合位于单独的一个数据库中。一个集合内的多个文档可以有多个不同的字段。一般来说,集合中的文档都有着相同或相关的目的。

6.什么是文档
文档由一组key value组成。文档是动态模式,这意味着同一集合里的文档不需要有相同的字段和结构。在关系型数据库中table中的每一条记录相当于MongoDB中的一个文档。

7.MongoDB和关系型数据库术语对比图
 
8.什么是”mongod“
mongod是处理MongoDB系统的主要进程。它处理数据请求,管理数据存储,和执行后台管理操作。当我们运行mongod命令意味着正在启动MongoDB进程,并且在后台运行。

9."mongod"参数有什么
  • 传递数据库存储路径,默认是"/data/db"端口号 默认是 "27017"

     
10.什么是"mongo"
它是一个命令行工具用于连接一个特定的mongod实例。当我们没有带参数运行mongo命令它将使用默认的端口号和localhost连接

11.MongoDB哪个命令可以切换数据库
MongoDB 用use+数据库名称的方式来创建数据库。use会创建一个新的数据库,如果该数据库存在,则返回这个数据库。
  1. [/code]
  2. 12.什么是非关系型数据库
  3. 非关系型数据库是对不同于传统关系型数据库的统称。非关系型数据库的显著特点是不使用SQL作为查询语言,数据存储不需要特定的表格模式。由于简单的设计和非常好的性能所以被用于大数据和Web Apps等
  4.  
  5. 13.非关系型数据库有哪些类型
  6. [list] -Key-Value 存储 Eg:Amazon S3图表 Eg:Neo4J文档存储 Eg:MongoDB基于列存储 Eg:Cassandra
  7. [/list]14.为什么用MOngoDB?
  8. [list]架构简单没有复杂的连接深度查询能力,MongoDB支持动态查询。容易调试容易扩展不需要转化/映射应用对象到数据库对象使用内部内存作为存储工作区,以便更快的存取数据。
  9. [/list]
  10. 15.在哪些场景使用MongoDB
  11. [list]大数据内容管理系统移动端Apps数据管理
  12. [/list]
  13. 16.MongoDB中的命名空间是什么意思?
  14. MongoDB内部有预分配空间的机制,每个预分配的文件都用0进行填充。
  15. 数据文件每新分配一次,它的大小都是上一个数据文件大小的2倍,每个数据文件最大2G。
  16. MongoDB每个集合和每个索引都对应一个命名空间,这些命名空间的元数据集中在16M的*.ns文件中,平均每个命名占用约 628 字节,也即整个数据库的命名空间的上限约为24000。
  17. 如果每个集合有一个索引(比如默认的_id索引),那么最多可以创建12000个集合。如果索引数更多,则可创建的集合数就更少了。同时,如果集合数太多,一些操作也会变慢。
  18. 要建立更多的集合的话,MongoDB 也是支持的,只需要在启动时加上“--nssize”参数,这样对应数据库的命名空间文件就可以变得更大以便保存更多的命名。这个命名空间文件(.ns文件)最大可以为 2G。
  19. 每个命名空间对应的盘区不一定是连续的。与数据文件增长相同,每个命名空间对应的盘区大小都是随分配次数不断增长的。目的是为了平衡命名空间浪费的空间与保持一个命名空间数据的连续性。
  20. 需要注意的一个命名空间$freelist,这个命名空间用于记录不再使用的盘区(被删除的Collection或索引)。每当命名空间需要分配新盘区时,会先查看$freelist是否有大小合适的盘区可以使用,如果有就回收空闲的磁盘空间。
  21.  
  22. 17.哪些语言支持MongoDB?
  23. [list]CC++C#JavaNode.jsPerlPhp 等
  24. [/list]
  25. 18.在MongoDB中如何创建一个新的数据库
  26. MongoDB 用 use + [b]数据库名称[/b] 的方式来创建数据库。use 会创建一个新的数据库,如果该数据库存在,则返回这个数据库。
  27. [code]
复制代码19.在MongoDB中如何查看数据库列表
使用命令"show dbs"
  1. [/code]
  2. 20.MongoDB中的分片是什么意思
  3. 分片是将数据水平切分到不同的物理节点。当应用数据越来越大的时候,数据量也会越来越大。当数据量增长时,单台机器有可能无法存储数据或可接受的读取写入吞吐量。利用分片技术可以添加更多的机器来应对数据量增加以及读写操作的要求。
  4. Sharding - MongoDB Manual​docs.mongodb.com  21.如何查看使用MongoDB的连接Sharding - MongoDB Manual21.如何查看使用MongoDB的连接
  5. 使用命令"db.adminCommand(“connPoolStats”)"
  6. [code]
复制代码22.什么是复制
复制是将数据同步到多个服务器的过程,通过多个数据副本存储到多个服务器上增加数据可用性。复制可以保障数据的安全性,灾难恢复,无需停机维护(如备份,重建索引,压缩),分布式读取数据。

23.在MongoDB中如何在集合中插入一个文档
要想将数据插入 MongoDB 集合中,需要使用insert()或save()方法。
  1. [/code]Collection Methods​docs.mongodb.com24.在MongoDB中如何除去一个数据库Collection Methods24.在MongoDB中如何除去一个数据库
  2. MongoDB 的dropDatabase()命令用于删除已有数据库。
  3. [code]
复制代码db.dropDatabase() - MongoDB Manual​docs.mongodb.com25.在MongoDB中如何创建一个集合。
在 MongoDB 中,创建集合采用db.createCollection(name, options)方法。options是一个用来指定集合配置的文档。
  1. [/code]db.createCollection() - MongoDB Manual​docs.mongodb.com26.在MongoDB中如何查看一个已经创建的集合
  2. 可以使用show collections 查看当前数据库中的所有集合清单
  3. [code]
复制代码27.在MongoDB中如何删除一个集合
MongoDB 利用db.collection.drop()来删除数据库中的集合。
  1. [/code]
  2. 28.为什么要在MongoDB中使用分析器
  3. 数据库分析工具(Database Profiler)会针对正在运行的mongod实例收集数据库命令执行的相关信息。包括增删改查的命令以及配置和管理命令。分析器(profiler)会写入所有收集的数据到 system.profile集合,一个capped集合在管理员数据库。分析器默认是关闭的你能通过per数据库或per实例开启。
  4.  
  5. 29.MongoDB支持主键外键关系吗
  6. 默认MongoDB不支持主键和外键关系。 用Mongodb本身的API需要硬编码才能实现外键关联,不够直观且难度较大。可以参考以下链接
  7. MongoDB的外键关联 - CSDN博客​blog.csdn.net  30.MongoDB支持哪些数据类型
  8. [list]StringIntegerDoubleBooleanObjectObject IDArraysMin/Max KeysDatetimeCodeRegular Expression等
  9. [/list]
  10. 31.为什么要在MongoDB中用"Code"数据类型
  11. "Code"类型用于在文档中存储 JavaScript 代码。
  12.  
  13. 32.为什么要在MongoDB中用"Regular Expression"数据类型
  14. "Regular Expression"类型用于在文档中存储正则表达式
  15.  
  16. 33.为什么在MongoDB中使用"Object ID"数据类型
  17. "ObjectID"数据类型用于存储文档id
  18.  
  19. 34.如何在集合中插入一个文档
  20. 要想将数据插入 MongoDB 集合中,需要使用insert()或save()方法。
  21. [code]
复制代码35."ObjectID"有哪些部分组成
一共有四部分组成:时间戳、客户端ID、客户进程ID、三个字节的增量计数器
_id是一个 12 字节长的十六进制数,它保证了每一个文档的唯一性。在插入文档时,需要提供_id。如果你不提供,那么 MongoDB 就会为每一文档提供一个唯一的 id。_id的头 4 个字节代表的是当前的时间戳,接着的后 3 个字节表示的是机器 id 号,接着的 2 个字节表示 MongoDB 服务器进程 id,最后的 3 个字节代表递增值。

36.在MongoDb中什么是索引
索引用于高效的执行查询.没有索引MongoDB将扫描查询整个集合中的所有文档这种扫描效率很低,需要处理大量数据。索引是一种特殊的数据结构,将一小块数据集保存为容易遍历的形式。索引能够存储某种特殊字段或字段集的值,并按照索引指定的方式将字段值进行排序。

37.如何添加索引
使用db.collection.createIndex()在集合中创建一个索引
  1. [/code]Indexing Reference​docs.mongodb.com38.MongoDB有哪些可替代产品Indexing Reference38.MongoDB有哪些可替代产品
  2. [list]CassandraRedisRiakCouchDB
  3. [/list]
  4. 39.如何查询集合中的文档
  5. 使用db.collectionName.find({key:value})查看当前数据库中指定集合的文档
  6. [code]
复制代码db.collection.find() - MongoDB Manual​docs.mongodb.com40.用什么方法可以格式化输出结果
使用pretty() 方法可以格式化显示结果
  1. [/code]
  2. 41.如何使用"AND"或"OR"条件循环查询集合中的文档
  3. 在find()方法中,如果传入多个键,并用逗号(,)分隔它们,那么 MongoDB 会把它看成是[b]AND[/b]条件。
  4. [code]
复制代码若基于OR条件来查询文档,可以使用关键字$or
  1. [/code]
  2. 42.在MongoDB中如何更新数据
  3. update()与save()方法都能用于更新集合中的文档。update()方法更新已有文档中的值,而save()方法则是用传入该方法的文档来替换已有文档。
  4. [code]
复制代码43.如何删除文档
MongoDB 利用 remove() 方法 清除集合中的文档。它有 2 个可选参数:
  • deletion criteria:(可选)删除文档的标准。justOne:(可选)如果设为 true 或 1,则只删除一个文档。

     
  1. [/code]db.collection.remove() - MongoDB Manual​docs.mongodb.com44.在MongoDB中如何排序
  2. MongoDB 中的文档排序是通过sort()方法来实现的。sort()方法可以通过一些参数来指定要进行排序的字段,并使用 1 和 -1 来指定排序方式,其中 1 表示升序,而 -1 表示降序。
  3. [code]
复制代码45.什么是聚合
聚合操作能够处理数据记录并返回计算结果。聚合操作能将多个文档中的值组合起来,对成组数据执行各种操作,返回单一的结果。它相当于 SQL 中的 count(*) 组合 group by。对于 MongoDB 中的聚合操作,应该使用aggregate()方法。
[code][/code]db.collection.aggregate() - MongoDB Manual​docs.mongodb.com46.在MongoDB中什么是副本集
在MongoDB中副本集由一组MongoDB实例组成,包括一个主节点多个次节点,MongoDB客户端的所有数据都写入主节点(Primary),副节点从主节点同步写入数据,以保持所有复制集内存储相同的数据,提高数据可用性。

Replication - MongoDB Manual​docs.mongodb.com

你可能感兴趣的:(笔记)