MongoDB视图完整教程:赵渝强老师详解定义、创建与查询优化最佳实践
MongoDB视图是基于聚合管道构建的虚拟集合,不实际存储数据,而是从源集合或视图中实时计算输出。你可以将其视为数据访问的过滤层——仅暴露指定字段。核心特性包括:只读(不可写入)、按需计算(结果不持久化)、以及独立访问权限控制。
创建视图的语法结构如下:
视频演示:
视图的核心价值在于数据抽象与安全防护。通过将敏感字段(如密码、身份证号)排除在投影之外,实现数据脱敏。结合基于角色的访问控制(RBAC),可按角色粒度暴露特定数据。其本质是:提取公共业务逻辑、安全地暴露子集数据,且天然只读。
下面通过完整代码演示具体实现流程。
(1)生成模拟订单与配送数据
向数据库插入10000条模拟订单及配送地址记录。订单号、价格、数量、时间随机生成,地址从预定义数组中随机选取。
(2)在单集合上创建视图
需求:查询当日金额最高的10笔订单,仅返回订单号、价格和下单时间,隐藏用户ID、数量等字段。通过视图实现:使用$match过滤当日数据,$sort与$limit取前10,$project投射所需字段。
(3)查询视图数据
视图创建后,查询方式与普通集合一致。执行db.view1.find(),结果仅返回指定三个字段,敏感信息自动屏蔽。
(4)跨集合关联创建视图
视图基于聚合管道,因此支持$lookup(左连接)等操作。例如,通过订单号关联订单集合与配送集合,生成订单-地址联合视图,实现数据整合。
(5)查询关联视图结果
查询view2,每个订单均附带配送地址,数据清晰整合。
(6)修改视图定义
业务变化时,无需删除重建视图,通过collMod命令更新管道定义。例如,在view1中加入数量字段qty,仅在$project阶段增加字段映射即可。
(7)删除视图
视图不再使用时,调用drop()方法删除。删除操作仅移除视图,不影响源数据。