- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
MongoDB高频面试题及参考答案
一、基础概念类
问:MongoDB是什么类型的数据库?和关系型数据库(比如MySQL)核心区别是什么?
答:MongoDB是文档型NoSQL数据库,数据以BSON(类JSON)格式存储。核心区别:①数据模型:MongoDB无固定schema,文档可灵活扩展;MySQL是结构化表模型,需预先定义字段和类型;②关联处理:MongoDB不支持外键,通过嵌入文档或引用实现关联,适合读多写少、关联简单的场景;MySQL依赖外键和JOIN,适合关联复杂的业务;③存储方式:MongoDB以集合(Collection)和文档(Document)为单位,MySQL以表(Table)和行(Row)为单位。
问:BSON是什么?和JSON相比有哪些优势?
答:BSON是BinaryJSON的缩写,是MongoDB数据存储和传输的格式。优势:①支持更多数据类型(如日期、二进制数据、正则表达式、ObjectId等),JSON仅支持字符串、数字、布尔、数组、对象、null;②二进制存储,查询和传输效率更高(无需像JSON那样解析字符串);③有长度字段,便于快速定位文档边界,提升读取性能。
问:MongoDB中的Collection和Document对应MySQL中的什么?ObjectId有什么作用?
答:Collection对应MySQL的表(Table),Document对应MySQL的行(Row)。ObjectId是MongoDB文档的默认主键(_id字段),作用:①唯一标识文档,确保集合内无重复;②包含时间戳(前4字节),可快速获取文档创建时间;③无需手动指定,MongoDB自动生成,避免主键冲突问题。
二、数据操作类
问:MongoDB中插入数据的命令有哪些?insert()、insertOne()、insertMany()的区别是什么?
答:插入命令主要是insert()、insertOne()、insertMany()。区别:①insertOne()一次插入1条文档,返回包含插入文档_id的结果;②insertMany()一次插入多条文档(接收数组参数),支持批量操作,返回所有插入文档的_id;③insert()是早期语法,既可以插入单条也可以插入多条(参数为文档或数组),但不如后两者语义清晰,现在更推荐使用insertOne()/insertMany()。
问:查询文档时,如何实现“模糊查询”?和MySQL的LIKE有什么区别?
答:MongoDB用正则表达式(regex操作符)实现模糊查询,比如查询name包含“张”的文档:`db.user.find({name:{regex:张}})或简写db.user.find({name:/张/})。和MySQLLIKE的区别:①MongoDB正则表达式支持更灵活的匹配规则(如大小写不敏感、锚点匹配等),比如/张/i`表示不区分大小写;②MySQLLIKE只能做简单的通配符匹配(%、_),而MongoDB正则还能结合索引优化(如前缀匹配时可命中索引);③性能上,非前缀匹配(如/.张./)会导致全集合扫描,和MySQLLIKE%张%类似,都需要避免。
**问:如何更新MongoDB中的文档?update()、updateOne()、updateMany()的区别?以及set和直接赋值的区别?**
答:更新命令核心是updateOne()、updateMany()、update()(早期语法)。区别:①updateOne()只更新匹配到的第一条文档;②updateMany()更新所有匹配到的文档;③update()需指定multi:true才会更新多条,否则只更第一条,语义不够直观,推荐用前两者。set和直接赋值的区别:①$set只更新指定字段,其他字段保留不变(推荐);②直接赋值会覆盖整个文档(除了_id),比如db.user.updateOne({_id:1},{name:新名字})会导致文档中除了_id和name外,其他字段全部丢失,风险极高。
问:删除文档的命令有哪些?remove()和deleteOne()、deleteMany()的区别?
答:删除命令有remove()、deleteOne()、deleteMany()。区别:①deleteOne()删除匹配到的第一条文档;②deleteMany()删除所有匹配到的文档;
原创力文档


文档评论(0)