小胖细说MongoDB特性 --- MongoDB ReadOnly View

小胖细说MongoDB特性 — MongoDB ReadOnly View

在MongoDB 3.4中,喜大普奔的迎来了传统关系型数据库中的一个利器,视图。MongoDB为了做到与RDBMS无缝连接可谓是花了大心思了。
今天就为大家介绍一下MongoDB的新特性,Read-Only View

How to Create a View?

官方给出了3种途径供我们选择:

  1. 提供了runCommand接口供管理者进行调用
    首先查看官方文档的描述:

《小胖细说MongoDB特性 --- MongoDB ReadOnly View》 runCommand

用法比较简单,我们可以直接通过 db.runCommand({}) 指令集的方式进行创建集合。

参数说明
<view>字符串。需要创建的集合名。
<source>字符串。来源于哪个集合或者哪个视图函数。这里填写的不是全名,只是集合名和函数名。 i.e 不需要填写类似test.myColl这样子的集合名。
<pipeline>数组。由一组聚合指令集组合的数组。(关于更多聚合函数的使用,详见其他篇幅)
  1. 对于需要指定默认的collation (关于更多collation的描述,详见其他篇幅),可以在runCommand中添加collation参数指定。

官方文档描述:

《小胖细说MongoDB特性 --- MongoDB ReadOnly View》 runCommand

参数说明
<collation>字符串。3.4新特性—collation
  1. 通过对runCommand函数的封装,直接采用db.createView的方式进行创建。
    官方文档描述:

《小胖细说MongoDB特性 --- MongoDB ReadOnly View》 createView

看得出,createView中的所有参数都是和上述保持一致,故此处不多做解释。

Behavior

  • Read-Only
    也就是只读视图。需要强调的是,MongoDB的视图在3.4引入之处,目的是为了减少开发对于数据哭的直接数据操作。在读写分离的情况下,若要发起一个复杂查询,完全可以通过对View的操作获取返回结果集,而避免写出一大段可读性较差的代码。而视图的维护完全交由DBA维护。因此,在3.4中,视图函数是无法进行修改的,DBA一旦创立后,开发只管调用即可。

  • Index Use and Sort Operation
    会使用索引进行查询。View是依托于源集合的,这里不对源视图作说明的原因是源视图的源视图还是参照源集合的。因此VIew的创建规则中涉及到的查询,会如同在集合中进行一次普通查询一样,使用合适的索引。因此,在创建视图的时候一定要注意索引的及时创建,否则就会导致慢查询了。
    另外需要注意的是,在使用视图函数的过程中,我们是无法使用$natural 进行自然排序的。(关于更多$natural排序,详见其他篇幅)

  • Immutable Name
    目前3.4版本支持的视图是无法进行重命名的。
    因此,需要重命名的方法就是先drop再create。

  • View Creation
    部分指令集无法使用

    • db.collection.mapReduce()
    • $text,因为$text操作符在聚合函数的第一个参数才有效
    • geoNear$geoNear操作符
    • 如果使用聚合函数创建的View中未加入_id的定义,则返回结果也不会有_id.
  • Sharded View
    对于分片集来说,是可以创建View的,但是意义并不大,因为我们无法对他进行$lookup的连表查询。

Get Views Info

我们可以通过db.getCollectionInfos()的方法来获取关于该视图的所有信息。
由于视图是相对于集合来说公开的,因此只要有相应权限即可调用。通过该指令集可以看到集合的创建规则。

总结

3.4新加入的特性View是非常棒的。可以极大的帮助DBA去管理开发的复杂语句,减少大量慢查询的涌现。

    原文作者:上海小胖
    原文地址: https://www.jianshu.com/p/fc12d43d018c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞