嵌入引用与聚合与索引与 TTL 地理

共 19 题
#

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 部分索引对满足条件的文档建索引,可减少索引体积 ✓ 正确答案