为什么要用视图,或者说什么情况下用视图?
- 简化查询:对于多个聚合查询,可以抽象出同一个视图,简化查询语句。
- 数据安全:源集合有些字段不想暴露出去,通过视图简化集合字段,只暴露视图给外部。
下面举个简单的例子:
1. 首先创建两个集合c1、c2,并插入一些数据:
1 | db.c1.insertMany([ |
2. 然后创建视图v1,使用c1作为主表,c2为级联表,k为关联字段:
1 | db.createView( |
查询v1视图,可以得到树形结构的级联数据
3. 如果想把树形级联转为笛卡尔积,就要展开child字段:
1 | db.v1.drop(); |
再查询v1视图,可以看到 k=3 的记录展开为2条了
4. child还是个object类型,不太直观,做个字段映射:
1 | db.v1.drop(); |
再查询v1视图,达到最终想要的结果了: