# 1. $lookup 的语义与跨集合 JOIN 模拟? A $lookup 默认是左外连接,主集合文档都会保留,结果为数组 ✓ 正确答案 B $lookup 默认执行内连接,无匹配的文档会被丢弃 C $lookup 相当于 SQL 中的全外连接,两侧多余文档都保留 D $lookup 只能做不等值匹配,无法做等值关联
# 2. MongoDB 聚合管道(Aggregation Pipeline)的阶段,$match、$group、$project、$lookup? A $group 是可流式阶段,边读边输出,几乎不占内存 B $lookup 只能对同一集合内的字段做重命名 C $project 相当于 WHERE,负责过滤文档 D $match 应尽量放在管道最前,以便利用索引并减少数据量 ✓ 正确答案
# 3. MongoDB 索引类型,单字段、复合、多键、地理、文本、TTL? A TTL 索引只能对日期字段设置,用于自动删除过期文档 ✓ 正确答案 B 多键索引用于字符串字段的全文搜索 C 文本索引用于地理坐标查询 D 复合索引不遵循最左前缀原则
# 4. TTL(Time To Live)索引的过期清理机制? A TTL 索引由后台线程约每 60 秒扫描一次,删除会有延迟 ✓ 正确答案 B TTL 索引删除是精确到毫秒的即时删除 C TTL 索引可以建立在整形字段上,无论如何都有效 D TTL 索引可以直接用于复合索引以加速多字段过期
# 5. 嵌入 vs 引用的量化决策,以访问模式(读多写少)、文档增长与一致性要求为依据的建模案例 A 数据会无限增长且频繁独立更新时,应优先嵌入 B 数据总是与父文档一起读取且规模可控时,嵌入更优 ✓ 正确答案 C 嵌入一定优于引用,因为读取更快 D 只要数据小于 16MB 就应嵌入
# 6. $geoWithin、$geoNear、$nearSphere 分别如何使用 2dsphere 索引?与普通索引在查询计划上的差异是什么? A 普通 B-tree 索引能高效支持最近邻距离排序 B $geoNear 必须配合 2dsphere 索引且按距离排序返回结果 ✓ 正确答案 C $geoWithin 返回按距离排序的结果 D 地理查询无需索引也能高效执行
# 7. 为什么评论数组这类无界数组是文档建模反模式(16MB 上限、索引膨胀、原子更新受限)?应如何拆分为独立集合? A 无界数组没有性能问题,可以放心嵌入 B 评论数据总是适合嵌入到文章文档中 C 数组元素可以独立原子更新,无需重写文档 D 无界数组会触发 16MB 上限、索引膨胀且原子更新受限,应拆为独立集合 ✓ 正确答案
# 8. 地理空间索引,2dsphere、2d、HASHED? A 2dsphere 索引支持 GeoJSON,用于球面地理查询 ✓ 正确答案 B HASHED 索引用于地理空间查询 C 2d 索引是推荐的新式地理索引,功能最全 D 三个索引都能用于分片键均匀分布
# 9. 索引选择性(Selectivity)与 ESR 规则? A 范围字段 R 应放在复合索引最前 B ESR 与索引选择性无关 C 排序字段 S 必须放在最后 D 等值字段 E 在前、排序字段 S 居中、范围字段 R 在后 ✓ 正确答案
# 10. MongoDB 的嵌入(Embedding)vs 引用(Referencing),何时嵌入、何时引用? A 数据总是与父文档一起读取且规模有界时,适合嵌入 ✓ 正确答案 B 引用一定比嵌入读取更快 C 嵌入每次都需额外查询关联数据 D 数据被多个文档共享时应优先嵌入
# 11. 文档大小限制(16MB)与 GridFS 的应用? A GridFS 是高性能对象存储,适合替代 S3 B 单个文档可以超过 16MB,只要磁盘足够 C GridFS 把大文件拆成多个 255KB 的 chunk 存储 ✓ 正确答案 D GridFS 只存元数据,不存文件内容
# 12. MongoDB 建模与一致性? A 跨文档更新天然原子,无需事务 B 反规范化冗余字段永远保持强一致 C 单文档内的更新是原子的,嵌入可扩大原子更新范围 ✓ 正确答案 D 引用模型不存在一致性风险
# 13. MongoDB 的索引策略,复合索引、TTL 与地理索引的配合? A 索引建得越多越好,能加速所有查询 B TTL 索引可以建立在任意字段上 C 复合索引应遵循 ESR 规则,TTL 与地理索引服务特定场景 ✓ 正确答案 D 地理索引与复合索引可以合并为一个索引
# 14. 多键索引(数组字段)的索引项展开与性能边界 A 多键索引对数组整体建立单个索引项 B 多键索引为数组每个元素建立独立索引项 ✓ 正确答案 C 数组元素越多,索引越小,查询越快 D 多键索引只能用于字符串数组
# 15. 物联网时间序列场景的桶化(bucket)建模如何设计桶键与边界?相比每事件一个文档在索引与写入放大上有何收益? A 桶化让每个事件都存成独立文档,便于索引 B 桶化只适用于文档数据库,不适用于时序优化 C 桶化最大的缺点是文档数太多 D 桶化按时间窗口合并事件,减少文档数与索引项,降低写入放大 ✓ 正确答案
# 16. TTL 索引的删除为什么不精确(后台周期扫描)?对复合索引、数组字段与分片集群有哪些限制? A TTL 删除是即时的,精确到秒 B TTL 索引在分片集群中删除全局精确 C TTL 索引可以建在任意字段类型上 D TTL 索引由后台线程约 60 秒扫描删除,且不能建在复合索引上 ✓ 正确答案
# 17. MongoDB 聚合 vs MapReduce,性能与复杂度对比? A MapReduce 性能优于聚合管道 B MapReduce 能利用数据库索引加速 C 聚合管道由 C++ 原生实现,性能高且推荐替代 MapReduce ✓ 正确答案 D 聚合管道只能做简单过滤,无法分组
# 18. MongoDB 的 $text 全文索引与中文分词? A $text 索引对中文分词支持良好,无需额外处理 B 一个集合可以建多个 $text 索引 C $text 索引默认按空格分词,对中文支持差 ✓ 正确答案 D $text 索引用于地理查询
# 19. MongoDB 的通配符索引与部分索引(partial index)的适用场景 A 通配符索引要求所有字段名必须相同 B 通配符索引用于固定字段名的文档 C 部分索引对集合内所有文档都建索引 D 部分索引对满足条件的文档建索引,可减少索引体积 ✓ 正确答案